我正在尝试在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
挂钩外部的标题中。
如何以更优雅的方式在产品标题之前添加产品类别? TIA!
答案 0 :(得分:0)
是的,它是基于挂钩的,因此不会造成问题。但是,如果您需要基于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
}
}