在 Woocommerce 中创建销售产品页面

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

对于所有#woocommerce 用户,请分享您创建销售产品的方法。该销售页面应该可以正常工作并且看起来像商店页面。例如:销售页面应该有分页、产品排序等

具体实现方法如下:

第 1 步:添加重写规则

add_action('init', 'gs_add_sale_rewrite_rule');
function gs_add_sale_rewrite_rule() {
    add_rewrite_rule(
        '^shop/sale/?$', // Custom URL
        'index.php?post_type=product&sale_products=1', // Query vars
        'top'
    );
}

第 2 步:添加查询变量

add_filter('query_vars', 'gs_add_sale_query_var');
function gs_add_sale_query_var($vars) {
    $vars[] = 'sale_products';
    return $vars;
}

第 3 步:当设置 sale_products 变量时,过滤主查询以仅显示销售产品。

add_action('pre_get_posts', 'filter_sale_products_query');
function filter_sale_products_query($query) {
    if (!is_admin() && $query->is_main_query() && get_query_var('sale_products')) {
        $query->set('post_type', 'product');
        $query->set('meta_query', array(
            array(
                'key'     => '_sale_price',
                'value'   => 0,
                'compare' => '>',
                'type'    => 'NUMERIC'
            )
        ));
    }
}

上面的代码运行良好。但是,当我从分页打开 /page/2 时,它给出了 404 错误。

woocommerce
1个回答
0
投票

我找到了解决方案。我用以下代码替换了步骤 1 和步骤 3。

第 1 步:添加重写规则

add_action('init', 'add_sale_rewrite_rule');
function add_sale_rewrite_rule() {
    add_rewrite_rule(
        '^sale/?$', 
        'index.php?post_type=product&sale_products=1&paged=1', 
        'top'
    );

    // Rule for subsequent pages
    add_rewrite_rule(
        '^sale/page/([0-9]{1,})/?$', 
        'index.php?post_type=product&sale_products=1&paged=$matches[1]', 
        'top'
    );
}

第 2 步:添加查询变量

add_filter('query_vars', 'gs_add_sale_query_var');
function gs_add_sale_query_var($vars) {
    $vars[] = 'sale_products';
    return $vars;
}

第 3 步:当设置 sale_products 变量时,过滤主查询以仅显示销售产品。

add_action('pre_get_posts', 'filter_sale_products_query');
function filter_sale_products_query($query) {
    if (!is_admin() && $query->is_main_query() && get_query_var('sale_products')) {
        $query->set('post_type', 'product');
        $query->set('meta_query', array(
            array(
                'key'     => '_sale_price',
                'value'   => 0,
                'compare' => '>',
                'type'    => 'NUMERIC'
            )
        ));
        
        // Handle pagination
        $paged = get_query_var('paged') ? absint(get_query_var('paged')) : 1;
        $query->set('paged', $paged);

        // Set posts per page
        //$query->set('posts_per_page', 12); // Adjust as needed
        
    }
}

第4步:刷新重写规则

添加此代码后,必须刷新重写规则。您可以通过访问 WordPress 管理区域中的“设置”>“永久链接”并单击“保存更改”来完成此操作。

在子主题的functions.php中添加代码

代码已测试并有效

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