显示有关特定产品/类别的WooCommerce商店通知/演示商店

时间:2019-02-09 04:52:30

标签: php wordpress woocommerce hook-woocommerce

我想显示WooCommerce商店通知,而不是整个站点,而是仅显示特定类别或产品。我想在woocommerce_before_shop_loopwoocommerce_before_single_product上显示它。就像这些视觉指南中一样:

https://businessbloomer.com/woocommerce-visual-hook-guide-archiveshopcat-page/ https://businessbloomer.com/woocommerce-visual-hook-guide-single-product-page/

我该如何实现?我以为我可以用woocommerce_demo_store打印WooCommerce商店通知,但是没有用。谢谢。

add_action( 'woocommerce_before_shop_loop', 'woocommerce_demo_store' );

它什么也没显示

woocommerce_demo_store是woocommerce钩子http://hookr.io/filters/woocommerce_demo_store/

1 个答案:

答案 0 :(得分:0)

首先,我们将删除显示默认商店通知的操作:

remove_action( 'wp_footer', 'woocommerce_demo_store' );

我们将在选定页面的所需位置添加商店通知:

if ( is_product_category( array( 'clothing', 'decor' ) ) ) {
    add_action( 'woocommerce_before_shop_loop', 'woocommerce_demo_store' );
}

用产品类别的标签更改'clothing', 'decor'

if ( is_single( array( 159, 160 ) ) ) {
    add_action( 'woocommerce_before_single_product', 'woocommerce_demo_store' );
}

用产品的ID更改'159', '160'

注意:您可以在is_product_category()is_single()函数的输入数组中使用名称,子段或ID。


以下是放入子主题的functions.php文件中的完整代码:

function lh_conditional_store_notice() {

    // Remove default 'woocommerce_demo_store' notice
    remove_action( 'wp_footer', 'woocommerce_demo_store' );

    // Add back the woocommerce_demo_store' notice, but on the selected pages
    // Show notice on the 'clothing' and 'decor' categories at 'woocommerce_before_shop_loop'
    if ( is_product_category( array( 'clothing', 'decor' ) ) ) {
        add_action( 'woocommerce_before_shop_loop', 'woocommerce_demo_store' );
    }

    // Show notice on single products having ID '159' and '160' at 'woocommerce_before_single_product'
    if ( is_single( array( 159, 160 ) ) ) {
        add_action( 'woocommerce_before_single_product', 'woocommerce_demo_store' );
    }
}
add_action( 'template_redirect', 'lh_conditional_store_notice' );

经过测试并正在研究:

  • WordPress 5.0.3
  • 二十一岁少年1.2
  • WooCommerce 3.5.4
  • Localhost(适用于Windows 5.6.15的XAMPP)