
在WooCommerce开发中,我们经常需要在单品页面(Single Product Page)的特定位置添加自定义内容,例如使用Elementor模板生成的短代码来展示尺寸指南、额外信息或促销内容。通常,我们会通过add_action钩子将短代码添加到页面的某个位置,例如:
add_action( 'woocommerce_single_product_summary', 'sizeguidemen', 20 );
function sizeguidemen() {
echo do_shortcode('[elementor-template id="66083"]');
}这段代码会将ID为66083的Elementor模板短代码无差别地显示在所有单品页面的产品摘要下方(优先级为20)。然而,实际需求往往更为复杂:我们可能只希望在特定产品分类下的商品页面显示这个短代码,而在其他分类下则不显示。这就需要引入条件逻辑来精确控制短代码的执行。
WordPress和WooCommerce提供了强大的条件标签和函数,允许开发者根据当前页面、产品属性、用户状态等多种条件来执行不同的代码块。对于本场景,最合适的函数是has_term()。
has_term()函数用于检查当前文章(在WooCommerce中通常指产品)是否属于指定的分类法(taxonomy)中的某个或某些术语(term,即分类、标签等)。
has_term()函数的典型用法如下:
has_term( $terms, $taxonomy, $post );
要实现“仅在特定产品分类下显示短代码”的需求,我们可以将do_shortcode调用包裹在if ( has_term(...) )条件语句中。
假设我们希望短代码仅在分类ID为123的产品页面显示:
add_action( 'woocommerce_single_product_summary', 'sizeguidemen', 20 );
function sizeguidemen() {
// 检查当前产品是否属于分类ID为 123 的产品分类
if ( has_term( 123, 'product_cat' ) ) {
echo do_shortcode('[elementor-template id="66083"]');
}
}这段代码的逻辑是:如果当前产品属于ID为123的产品分类,则执行do_shortcode显示Elementor模板;否则,不执行任何操作,短代码也不会显示。这有效地实现了“排除其他分类”的效果。
has_term()函数还支持使用分类别名(slug)和数组,这使得条件判断更加灵活。
使用分类别名:
if ( has_term( 'tables', 'product_cat' ) ) { // 'tables' 是分类的别名
echo do_shortcode('[elementor-template id="66083"]');
}使用多个分类ID或别名(数组): 如果希望短代码在多个特定分类下显示,可以将分类ID或别名放入数组中。
// 在分类ID为 123、456、789 的产品页面显示
if ( has_term( array( 123, 456, 789 ), 'product_cat' ) ) {
echo do_shortcode('[elementor-template id="66083"]');
}
// 在别名为 'tables' 或 'chairs' 的产品页面显示
if ( has_term( array( 'tables', 'chairs' ), 'product_cat' ) ) {
echo do_shortcode('[elementor-template id="66083"]');
}建议将上述代码放置在以下位置:
原始问题是“如何排除/禁用短代码”,而上述示例是“如何包含/启用短代码”。如果您的需求是“在所有分类下都显示,除了某个或某些特定分类”,可以使用逻辑非运算符 !。
例如,要排除分类ID为 123 的产品:
add_action( 'woocommerce_single_product_summary', 'sizeguidemen', 20 );
function sizeguidemen() {
// 如果当前产品不属于分类ID为 123 的产品分类,则显示短代码
if ( ! has_term( 123, 'product_cat' ) ) {
echo do_shortcode('[elementor-template id="66083"]');
}
}同样,也可以应用于数组:
// 排除分类ID为 123 和 456 的产品
if ( ! has_term( array( 123, 456 ), 'product_cat' ) ) {
echo do_shortcode('[elementor-template id="66083"]');
}has_term() 函数的执行效率很高,因为它利用了WordPress的查询优化。在单个产品页面上使用它通常不会引起明显的性能问题。
在将代码部署到生产环境之前,务必在开发或测试环境中进行充分测试,确保短代码在预期分类下显示,在非预期分类下隐藏,并且没有引入其他兼容性问题。
通过巧妙地运用has_term()函数,我们可以在WooCommerce单品页面上实现对短代码的精细化控制。无论是希望短代码仅在特定分类下显示,还是希望在除特定分类外的所有分类下显示,has_term()都提供了简洁而强大的解决方案。掌握这种条件逻辑的应用,将大大提升WooCommerce自定义开发的灵活性和效率。
以上就是如何在WooCommerce中基于产品分类ID控制短代码的显示的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号