Не работает хук для описания товара woocommerce_single_product_summary для Woocomerce

275
22 мая 2017, 00:23

Хочу получить текст для карточки товара, а конкретно написать регулярку для замены определенного контента,но не могу получить сам контент пишу следующеее в functions.php

add_filter( 'woocommerce_single_product_summary','woocommerce_template_single_excerpt', 'woo_excerpt', 20);
function woo_excerpt($content){
     echo"<!--.$content."-—>";//пусто
     return $content;
}
Answer 1

Функция add_filter записана неправильно. В ней первый параметр - название хука, второй - имя пользовательской функции, третий - приоритет, четвертый - число передаваемых параметров в пользовательскую функцию.

И вообще, это не фильтр, а action. Надо так:

add_action( 'woocommerce_single_product_summary', 'woo_excerpt', 10, 2 );
function woo_excerpt( $array, $int ) { 
    var_dump($array);
    var_dump($int);
};

Но вызов action не даёт возможности изменить текст краткого описания товара. Для этого есть фильтр woocommerce_short_description:

add_filter( 'woocommerce_short_description', 'filter_woocommerce_short_description', 10, 1 ); 
function filter_woocommerce_short_description( $post_post_excerpt ) { 
    // Применяйте свою регулярку к $post_post_excerpt здесь
    return $post_post_excerpt; 
};

И хотя в вопросе написано excerpt (краткое описание товара), и код выше именно для него, но я полагаю, что есть желание исправить полное описание товара. А оно выводится во вкладках. Фильтр для вкладок:

add_filter( 'woocommerce_product_tabs', 'filter_woocommerce_product_tabs', 10, 1 ); 
function filter_woocommerce_product_tabs( $woocommerce_default_product_tabs ) { 
    // учтите, что $woocommerce_default_product_tabs это массив
    return $woocommerce_default_product_tabs; 
};

Из комментариев автора - вот что выводит var_dump($woocommerce_default_product_tabs):

Получается, что в массиве только указатели на обработчики табов.

Смотрим текст функции woocommerce_product_description_tab в файле wp-content/plugins/woocommerce/includes/wc-template-functions.php:

if ( ! function_exists( 'woocommerce_product_description_tab' ) ) {
    function woocommerce_product_description_tab() {
        wc_get_template( 'single-product/tabs/description.php' );
    }
}

Видно, что эту функцию можно перекрыть своей, но лучше всё-таки использовать шаблон wp-content/plugins/woocommerce/templates/single-product/tabs/description.php. Его надо скопировать в папку своей дочерней темы wp-content/themes/yourtheme/woocommerce/single-product/tabs/description.php и поправить.

Но можно поступить ещё проще, если нужно изменить только описание товара. Видим, что для вывода самого описания в description.php используется the_content(); Это стандартная функция WordPress, к которой можно применить фильтр в functions.php:

add_filter( 'the_content', 'filter_content' );
function filter_content( $content ) {
  // Фильтр...
  return $content;
}

Проблема тут ровно одна - через этот фильтр полетят как описания всех товаров, так и контент страниц, записей и т.д. Если фильтр таков, что сработает только на товарах - ок. Но если отличить контент товара от записи сложно, то лучше поправить последнюю строку в description.php:

<?php // the_content(); ?>
<?php $content = get_the_content();
// фильтр...
echo $content;
?>
READ ALSO
.c_str() возвращает какой-то бред

.c_str() возвращает какой-то бред

День добрый! На C++ считываю данные из файлаВ конце имею string, которую мне надо представить в виде const char*, для чего использую

231
Кольцевой список, используя контейнер list

Кольцевой список, используя контейнер list

Проблема вот в чём, мне необходимо создать двусвязный кольцевой список используя контейнер listДвусвязный он по умолчанию, а вот кольцевая...

250
Не работает конструкция

Не работает конструкция

Здравствуйте! В первый раз столкнулся с такой конструкцией, как она называется и почему не работает:

275