удалить/добавить фильтр в файл функций Wordpress

У меня проблема с попыткой изменить вывод сообщения через файл functions.php моей темы.

Вот код, предоставленный плагином woocommerce:

function woocommerce_add_to_cart_message() {
    global $woocommerce;

    if (get_option('woocommerce_cart_redirect_after_add')=='yes') :

        $return_to  = (wp_get_referer()) ? wp_get_referer() : home_url();

        $message    = sprintf('<a href="%s" class="button">%s</a> %s', $return_to, __('Continue Shopping;', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );

    else :

        $message    = sprintf('<a href="%s" class="button">%s</a> %s', get_permalink(woocommerce_get_page_id('cart')), __('View Cart &rarr;', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );

    endif;

    $woocommerce->add_message( apply_filter('woocommerce_add_to_cart_message', $message) );
}

То, что я пытаюсь сделать, это изменить сообщение кнопки, но я не совсем уверен, как это сделать.

Я читал кодекс WP, но, к сожалению, не думаю, что совсем понимаю, как это работает. Вот что я пробовал:

function remove_woocommerce_add_to_cart_message() {
    remove_filter('woocommerce_add_to_cart_message', $message) ;
}

function woocommerce_add_to_cart_message_edited() {
    global $woocommerce;

    if (get_option('woocommerce_cart_redirect_after_add')=='yes') :

        $return_to  = (wp_get_referer()) ? wp_get_referer() : home_url();

        $message    = sprintf('<a href="%s" class="button">%s</a> %s', $return_to, __('Continue Shopping;', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );

    else :

        $message    = sprintf('<a href="%s" class="button">%s</a> %s', get_permalink(woocommerce_get_page_id('cart')), __('NEW CART MESSAGE', 'woocommerce'), __('Product successfully added to your cart.', 'woocommerce') );

    endif;

    $woocommerce->add_message( apply_filter('woocommerce_add_to_cart_message', $message) );
}

Итак, я попытался удалить фильтр, который выводит сообщение, затем я объявляю его, но, похоже, он не работает.

Любая помощь будет оценена по достоинству!


person Jeremy Miller    schedule 18.08.2012    source источник
comment
Вы где-нибудь вызываете свои функции?   -  person Krycke    schedule 19.08.2012
comment
Я думаю, нет? Я действительно не уверен. Тема настроена с кучей хуков, поэтому мне нужно привязать их функции. Это то, что я пытался сделать, сняв фильтр. Но я явно что-то не так делаю.   -  person Jeremy Miller    schedule 19.08.2012


Ответы (2)


Когда в коде указано apply_filter('woocommerce_add_to_cart_message', $message), код будет искать любой фильтр, добавленный к этому хуку, и проходить их по одному.

Вы можете создать функцию с любым именем и добавить ее в этот хук следующим образом:

function my_filer_function( $message )
{
    // Here you should modify $message as you want, and then return it.
    $newButtonString = 'NEW BUTTON STRING';
    $replaceString = '<a$1class="button">' . $newButtonString .'</a>';
    $message = preg_replace('#<a(.*?)class="button">(.*?)</a>#', $replaceString, $message);
    return $message;
}
// Then add the function to that filter hook and prioritize it last
add_filter( 'woocommerce_add_to_cart_message', 'my_filer_function', 999);
person Krycke    schedule 18.08.2012
comment
Потрясающие. Спасибо! Я попробую. - person Jeremy Miller; 19.08.2012
comment
это не совсем сработало, как я надеялся. Это изменяет область с надписью «Продукт успешно добавлен в корзину» — я хочу изменить конкретно текст кнопки — тот, который говорит «Просмотр корзины» — так что я просто скопировал всю эту переменную сообщения из предыдущей функции, и она работает . Спасибо за вашу помощь! - person Jeremy Miller; 19.08.2012
comment
Большой. Вы также можете сделать что-то вроде отредактированного кода выше, если хотите. - person Krycke; 20.08.2012

// Output success messages
    if ( get_option( 'woocommerce_cart_redirect_after_add' ) == 'yes' ) :

        $return_to  = apply_filters( 'woocommerce_continue_shopping_redirect', wp_get_referer() ? wp_get_referer() : home_url() );


$message    = sprintf('%s',$added_text);
    else :


$message    = sprintf('%s',$added_text);

    endif;

приведенный выше код я внес в него изменения, пожалуйста, проверьте, может быть, он вам полезен

person Ronald Joseph    schedule 01.08.2013