对于所有#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 错误。
我找到了解决方案。我用以下代码替换了步骤 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中添加代码
代码已测试并有效