WooCommerce:在指定商品分类中条件性禁用或排除短代码

WooCommerce:在指定商品分类中条件性禁用或排除短代码

本教程将详细介绍如何在WooCommerce单品页面上,通过条件逻辑控制短代码的显示,实现对特定商品分类的短代码禁用或排除。我们将利用WordPress的has_term()函数,结合functions.php中的add_action钩子,确保短代码仅在符合条件的商品分类中执行,从而优化页面内容和用户体验。文章将提供详细的代码示例和使用注意事项,帮助您精确管理网站内容。

理解需求:条件性短代码显示

在WooCommerce商店中,我们经常需要在单品页面上添加自定义内容,例如尺码指南、特定商品的促销信息或Elementor模板。这些内容通常通过短代码实现,并使用add_action钩子将其挂载到页面的特定位置。例如,以下代码片段将一个Elementor模板短代码无条件地显示在所有单品页面的摘要区域:

// 在functions.php中添加 add_action( 'woocommerce_single_product_summary', 'sizeguidemen_shortcode_display', 20 );  function sizeguidemen_shortcode_display() {     echo do_shortcode('[elementor-template id="66083"]'); }

然而,在某些情况下,我们可能不希望这个短代码在所有商品分类中都显示。例如,尺码指南可能只适用于服装类商品,而配件类商品则不需要。此时,我们就需要引入条件逻辑,根据商品的分类来决定是否执行并显示短代码。

实现条件逻辑:has_term()函数

WordPress提供了一个强大的函数has_term(),用于检查当前文章或自定义文章类型(如WooCommerce商品)是否属于一个或多个指定的分类术语(term)。这个函数是实现条件性短代码显示的关键。

has_term()函数的基本语法如下:

has_term( $term, $taxonomy, $post );
  • $term:必需。可以是单个分类ID、分类slug,或包含多个ID/slug的数组。
  • $taxonomy:必需。分类法的名称。对于WooCommerce商品分类,通常是’product_cat’。
  • $post:可选。要检查的文章ID或WP_Post对象。如果省略,则默认为当前文章。在WooCommerce单品页面上下文中,通常可以省略此参数,它会自动检测当前商品。

代码示例:在指定商品分类中禁用短代码

为了在特定商品分类中禁用或排除短代码,我们将使用has_term()函数来检查当前商品是否属于这些分类。如果商品属于被排除的分类,我们就阻止短代码的执行。

以下是修改后的代码,用于排除ID为65和slug为accessories的商品分类:

// 在functions.php中添加或修改 add_action( 'woocommerce_single_product_summary', 'sizeguidemen_conditional_shortcode_exclusion', 20 );  function sizeguidemen_conditional_shortcode_exclusion() {     // 定义要排除的商品分类ID或slug列表     // 您可以根据需要添加更多的ID或slug     $excluded_categories = array( 65, 'accessories' ); // 示例:ID 65 和 'accessories' 分类      // 检查当前商品是否属于任何一个被排除的分类     // 如果 has_term() 返回 true,表示商品属于被排除的分类     // 此时,我们使用 '!' 运算符取反,即当商品不属于被排除分类时才执行短代码     if ( ! has_term( $excluded_categories, 'product_cat' ) ) {         // 如果当前商品不属于任何被排除的分类,则执行并显示短代码         echo do_shortcode('[elementor-template id="66083"]');     } }

代码解析:

WooCommerce:在指定商品分类中条件性禁用或排除短代码

Pixelfox AI

多功能AI图像编辑工具

WooCommerce:在指定商品分类中条件性禁用或排除短代码428

查看详情 WooCommerce:在指定商品分类中条件性禁用或排除短代码

  1. $excluded_categories = array( 65, ‘accessories’ );:我们创建了一个数组,包含了希望排除的商品分类的ID和slug。您可以根据自己的需求修改这个数组。
  2. if ( ! has_term( $excluded_categories, ‘product_cat’ ) ):这是核心的条件判断。
    • has_term( $excluded_categories, ‘product_cat’ ) 会检查当前商品是否属于$excluded_categories数组中列出的任何一个分类。如果属于其中任意一个,它将返回 true。
    • ! 运算符将结果取反。所以,如果商品属于任何被排除的分类,整个条件判断就会变为 true,从而执行短代码。

has_term()函数更多用法

has_term()函数非常灵活,您可以根据具体需求使用不同的参数组合:

  • 只在特定分类中显示短代码(包含逻辑): 如果您想让短代码只在ID为123的分类中显示,可以使用:

    // 只在ID为123的分类中显示短代码 if ( has_term( 123, 'product_cat' ) ) {     echo do_shortcode('[elementor-template id="66083"]'); }
  • 使用单个分类Slug:

    // 排除 slug 为 'electronics' 的分类 if ( ! has_term( 'electronics', 'product_cat' ) ) {     echo do_shortcode('[elementor-template id="66083"]'); }
  • 使用多个分类ID数组:

    // 排除 ID 为 123, 456, 789 的分类 $excluded_ids = array( 123, 456, 789 ); if ( ! has_term( $excluded_ids, 'product_cat' ) ) {     echo do_shortcode('[elementor-template id="66083"]'); }
  • 使用多个分类Slug数组:

    // 排除 slug 为 'tables', 'chairs' 的分类 $excluded_slugs = array( 'tables', 'chairs' ); if ( ! has_term( $excluded_slugs, 'product_cat' ) ) {     echo do_shortcode('[elementor-template id="66083"]'); }

注意事项

  1. 代码放置位置: 上述代码应放置在您的WordPress主题的functions.php文件中,或者更推荐的方式是创建一个自定义插件来管理这类功能,以避免主题更新时代码丢失。
  2. 获取分类ID和Slug:
    • 分类ID: 在WordPress后台,导航到“商品” -> “分类”。编辑任一分类,您可以在浏览器地址栏中找到tag_ID=后面的数字,这就是分类ID。
    • 分类Slug: 在编辑分类页面,Slug字段中显示的就是分类的slug。
  3. 短代码ID: 示例中的[elementor-template id=”66083″]是Elementor模板的短代码。请根据您实际使用的短代码替换为您自己的短代码。
  4. 钩子优先级: add_action函数中的20是钩子的优先级。数字越小,执行越早。如果您的短代码内容依赖于其他在同一钩子上运行的功能,可能需要调整这个优先级。
  5. 测试: 在将代码部署到生产环境之前,务必在开发或测试环境中进行充分测试,确保功能按预期工作,并且没有引入新的问题。
  6. 缓存: 如果您的网站使用了缓存插件或服务器端缓存,在修改代码后,请务必清除所有缓存,以确保新的逻辑能够立即生效。

总结

通过利用WordPress提供的has_term()函数,我们可以轻松地为WooCommerce单品页面的短代码添加强大的条件逻辑。无论是希望在特定分类中显示短代码,还是在特定分类中禁用短代码,这种方法都提供了极大的灵活性和控制力。正确实施这些条件逻辑不仅能优化用户体验,还能使您的网站内容管理更加精细化和高效。

以上就是WooCommerce:在指定商品分类中条件性禁用或排除短代码的详细内容,更多请关注php word go wordpress 浏览器 access ai php Array 运算符 if 对象 WordPress

大家都在看:

php word go wordpress 浏览器 access ai php Array 运算符 if 对象 WordPress

go
上一篇
下一篇