Wordpress - лучший способ добавления категории продукта к названию (Woocommerce / Astra) - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь добавить заголовок страницы отдельного продукта Woocommerce (в заголовке) к категории, чтобы она выглядела как

Категория

Название продукта

Это то, что я имею до сих пор:

function prepend_category_to_title($title, $id) {
    $terms = get_the_terms( $post->ID, 'product_cat' );
    foreach ($terms as $term) {
        $product_cat = $term->name;
        break;
    }
    if( is_product() ) {
        $title = $product_cat . $title;
    }
    return $title;
}
add_filter('the_title', 'prepend_category_to_title', 10, 2);

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

Из этого видно: https://wordpress.stackexchange.com/questions/309151/apply-the-title-filter-in-post-page-title-but-not-in-menu-title, что это ожидаемое поведение, и я могу добавить дополнительные фильтры для удаления этих дополнительных выходных данных. например add_filter( 'pre_wp_nav_menu'...

Но это кажется ужасно неэффективным и грязным. Кроме того, добавление заголовка таким образом означает, что текст категории также обернут в теги заголовка <h1>, которые мне не нужны, так как название категории должно быть над заголовком продукта меньшими тегами <h5> (и другим шрифтом). .

Чтобы сделать это немного сложнее, из-за темы, которую я использую (Astra), название продукта находится в заголовке вне хука Woocommerce woocommerce_single_product_summary.

Как можно более элегантно добавить название продукта к категории продукта? ТИА!

1 Ответ

0 голосов
/ 17 мая 2019

Да, он основан на ловушке, поэтому не создает проблем. Но если вам нужно действовать по принципу WooCommerce, вам нужно пропустить хук WordPress the_title и использовать хук WooCommerce.

woocommerce_single_product_summary крючок ассоциируется с названием, ценой, экспертом, .. на странице отдельного продукта. см. ниже код строки, которая показывает ловушку и связанную с ней функцию.

add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_sharing', 50 );

Чтобы воспользоваться Woocommerce, вам нужно убрать реальный хук и заново активировать функцию, как показано ниже. Надеюсь, что приведенный ниже код оправдывает ваш вопрос. Вы можете поместить этот фрагмент в файл functions.php вашей темы

remove_action('woocommerce_single_product_summary','woocommerce_template_single_title',5);
add_action('woocommerce_single_product_summary', 'woocommerce_my_single_title',5);

if ( ! function_exists( 'woocommerce_my_single_title' ) ) {
   function woocommerce_my_single_title() {
?>
            /*
             your logic goes here
             No need to return data, just echo/print
            */
<?php
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...