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