我尝试了下面的以下 URL 参数,
orderby
参数工作正常,显示按日期排序的所有产品,但我只想显示前 3 个产品(limit
参数不起作用):
../shop/?orderby=date&limit=3
有人成功过吗?
这可以通过挂钩在
woocommerce_product_query
动作挂钩中的函数来完成。
posts_per_page
参数:当设置
3
为posts_per_page
参数时,每页显示3个产品(不太方便)。 nopaging
参数设置为 false,则所有产品都将显示而不分页。
post__in
参数(正确的方式):这需要使用您定义的“限制”URL 参数预先查询按日期排序的产品 ID。前 3 个产品不分页显示。
代码:
add_action( 'woocommerce_product_query', 'enable_query_var_limit', 10, 2 );
function enable_query_var_limit( $query, $q ) {
error_log(print_r($query, true));
if ( ! is_admin() && isset($_GET['limit']) && isset($_GET['orderby'])
&& is_numeric($_GET['limit']) && $_GET['orderby'] === 'date' ) {
$query->set( 'post__in', wc_get_products( [
'status' => 'publish',
'limit' => intval($_GET['limit']),
'orderby' => 'date',
'return' => 'ids',
] ) );
}
}
代码位于子主题的functions.php文件中(或插件中)。
经过测试并可与
?orderby=date&limit=3
查询字符串 (URL 变量)。