Woocommerce 如何在显示过滤后的产品时覆盖/shop/页面上的类别模板?

Woocommerce 如何在显示过滤后的产品时覆盖/shop/页面上的类别模板?,woocommerce,Woocommerce,我已经创建了一个函数,可以使用URL参数过滤产品,并将它们显示在/shop/page上。那很好 但是,只有在WooCommerce/shop/页面上设置了产品模板时,这才有效 在我的情况下,要求将类别列表设置为/shop/页面上的默认模板。这意味着在使用URL参数运行产品查询时,我需要覆盖该模板并显示过滤后的产品列表 (例如example.com/shop/?param1=foo¶m2=bar) 我尝试了以下代码(以及一些迭代),但我被卡住了,不知道如何在应用产品过滤器时覆盖默认模板:

我已经创建了一个函数,可以使用URL参数过滤产品,并将它们显示在/shop/page上。那很好

但是,只有在WooCommerce
/shop/
页面上设置了产品模板时,这才有效

在我的情况下,要求将类别列表设置为
/shop/
页面上的默认模板。这意味着在使用URL参数运行产品查询时,我需要覆盖该模板并显示过滤后的产品列表

(例如
example.com/shop/?param1=foo¶m2=bar

我尝试了以下代码(以及一些迭代),但我被卡住了,不知道如何在应用产品过滤器时覆盖默认模板:

add_filter( 'woocommerce_locate_template', [$this, 'my_include_template_function'], 10, 3 );

public function my_change_template_function($template, $template_name, $template_path)
{
    if (!empty($_GET['param1']) && is_shop() && $template_name == 'content-product_cat.php') {
        return wc_get_template_part('content', 'product');
    } else {
        return $template;
    }
}

因此,categories循环的源[通过过滤器][1]添加到循环开始中

add_filter( 'woocommerce_product_loop_start', 'woocommerce_maybe_show_product_subcategories' );
该函数根据以下内容更改输出:

$display_type = woocommerce_get_loop_display_mode();
但是,结果不能直接过滤

但是它依赖于
get\u option()
中的一些值(因为该设置在自定义程序中),并且
get\u option()
可以通过

因此,当您有一个特定的
$\u GET
参数时,您可以告诉WooCommerce不要显示类别的一种潜在方法,当在URL中检测到该参数时,您可以将shop display mode选项过滤为
products
。像这样:

/**
 * Filter shop display type.
 *
 * @param string $value - 'products' | 'subcategories' | 'both'
 * @return string
 */
function kia_woocommerce_shop_page_display( $value ) {
    if ( ! empty( $_GET['param1'] ) {
        $value = 'products';
    }
    return $value;
}
add_filter( 'option_woocommerce_shop_page_display', 'kia_woocommerce_shop_page_display' );

因此,categories循环的源[通过过滤器][1]添加到循环开始中

add_filter( 'woocommerce_product_loop_start', 'woocommerce_maybe_show_product_subcategories' );
该函数根据以下内容更改输出:

$display_type = woocommerce_get_loop_display_mode();
但是,结果不能直接过滤

但是它依赖于
get\u option()
中的一些值(因为该设置在自定义程序中),并且
get\u option()
可以通过

因此,当您有一个特定的
$\u GET
参数时,您可以告诉WooCommerce不要显示类别的一种潜在方法,当在URL中检测到该参数时,您可以将shop display mode选项过滤为
products
。像这样:

/**
 * Filter shop display type.
 *
 * @param string $value - 'products' | 'subcategories' | 'both'
 * @return string
 */
function kia_woocommerce_shop_page_display( $value ) {
    if ( ! empty( $_GET['param1'] ) {
        $value = 'products';
    }
    return $value;
}
add_filter( 'option_woocommerce_shop_page_display', 'kia_woocommerce_shop_page_display' );