如何根据 url 参数在特定页面上添加简码

How to add a shortcode on a specific page based on the url parameter

如果特定过滤器处于活动状态,我想在 WooCommerce 商店循环之前添加自定义内容。

例子url是这样的:/shop/?filter_brand=nike

到目前为止我试过这个:

add_action( 'woocommerce_before_shop_loop', 'amc_add_content_before_loop' );
function amc_add_content_before_loop() {
    if ( is_product_category('nike') ) {
        echo esc_html__("Custom content", "amc");
    }
}

但是页面上没有显示内容

编辑

有了 Vincenzo 的回答,现在可以了。 我现在正在尝试使用变量并添加一个简码。我试过这个:

add_action( 'woocommerce_before_shop_loop', 'add_custom_content_before_shop_loop2' );
function add_custom_content_before_shop_loop2() {
    $terms = get_terms( 'pa_brand' );
    foreach ( $terms as $term ) {
        if ( is_shop() && isset( $_GET['filter_brand'] ) && $_GET['filter_brand'] == $term->name ) {
            echo do_shortcode('[block id="brand-'.$term->name.'"]');
        }
    }
}

所以它应该做的是,如果过滤器 $term->name 处于活动状态,则应回显带有 $term->name 的自定义简码。

但是没用。

考虑到您发布的url:/shop/?filter_brand=nike,您可以这样做:

add_action( 'woocommerce_before_shop_loop', 'add_custom_content_before_shop_loop' );
function add_custom_content_before_shop_loop() {

    if ( is_shop() && isset( $_GET['filter_brand'] ) && $_GET['filter_brand'] == 'nike' ) {
        // add custom content
    }

}

代码已经过测试并且可以工作。将它添加到您的活动主题的 functions.php 文件中。

编辑

要获取 pa_brand 属性名称,您使用 $term->name 而不是 $term->slug

$termWP_Term class. The structure of the WP_Term object can be found here.

的实例

试试这个:

add_action( 'woocommerce_before_shop_loop', 'add_custom_content_before_shop_loop2' );
function add_custom_content_before_shop_loop2() {
    $terms = get_terms( 'pa_brand' );
    foreach ( $terms as $term ) {
        if ( is_shop() && isset( $_GET['filter_brand'] ) && $_GET['filter_brand'] == $term->slug ) {
            echo do_shortcode('[block id="brand-'.$term->slug.'"]');
        }
    }
}