【问题标题】:Wordpress - Better way of prepending product category to the title (Woocommerce / Astra)Wordpress - 将产品类别附加到标题的更好方法(Woocommerce / Astra)
【发布时间】:2019-10-04 15:26:02
【问题描述】:

我正在尝试在 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 挂钩之外的标题中。

如何以更优雅的方式在产品类别前添加产品标题?蒂亚!

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    是的,它基于钩子,因此不会产生问题。但是如果你需要基于 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,您需要删除实际的钩子并重新启动函数,如下所示。希望下面的代码可以证明您的问题。您可以将此 sn-p 放入主题的 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
       }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-10
      • 2019-05-21
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-04
      • 1970-01-01
      相关资源
      最近更新 更多