自定义 WooCommerce 查询字符串仅显示前 3 个产品

问题描述 投票:0回答:1

我尝试了下面的以下 URL 参数,

orderby
参数工作正常,显示按日期排序的所有产品,但我只想显示前 3 个产品(
limit
参数不起作用):

../shop/?orderby=date&limit=3

有人成功过吗?

php woocommerce product query-string urlvariables
1个回答
0
投票

这可以通过挂钩在

woocommerce_product_query
动作挂钩中的函数来完成。

  1. 使用
    posts_per_page
    参数:

当设置

3
posts_per_page
参数时,每页显示3个产品(不太方便)
如果我们另外将
nopaging
参数设置为 false,则所有产品都将显示而不分页。

  1. 使用
    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 变量)

© www.soinside.com 2019 - 2024. All rights reserved.