如何在WordPress+WooCommerce中创建固定价格商品专属页面
实现WooCommerce专属“3k Store”页面自动筛选3000元商品的方法
嘿,这个需求我帮不少用户落地过,给你分享三种靠谱的方案,你可以根据自己的技术能力来选:
方案一:自定义短代码(适合技术小白)
WooCommerce自带产品短代码,但没法直接筛选固定价格,不过我们可以自己写一个简单的短代码来实现:
- 打开WordPress后台,进入「外观」→「主题文件编辑器」,找到当前主题的
functions.php文件(强烈建议用子主题操作,避免主题更新丢失代码)。 - 在文件末尾添加以下代码:
function display_3k_products() { // 查询价格为3000的产品 $args = array( 'post_type' => 'product', 'posts_per_page' => -1, // 显示所有符合条件的产品 'meta_query' => array( array( 'key' => '_price', 'value' => 3000, 'type' => 'numeric', 'compare' => '=' ) ) ); $products = new WP_Query($args); ob_start(); // 开启输出缓存 if ($products->have_posts()) { woocommerce_product_loop_start(); while ($products->have_posts()) { $products->the_post(); wc_get_template_part('content', 'product'); } woocommerce_product_loop_end(); wp_reset_postdata(); } else { echo '<p>暂无价格为3000元的商品</p>'; } return ob_get_clean(); } add_shortcode('3k_store_products', 'display_3k_products');
- 保存文件后,新建一个页面,标题设为「3k Store」,在页面内容里输入短代码
[3k_store_products],发布页面即可。
方案二:自定义页面模板(适合有基础的开发者)
如果想让这个页面的布局更个性化,可以用自定义页面模板:
- 找到当前主题的
page.php文件,复制一份并重命名为page-3k-store.php。 - 在文件最顶部添加模板注释:
<?php /* Template Name: 3k Store Page */ ?>
- 找到页面中的主查询部分(通常是
if ( have_posts() ) : while ( have_posts() ) : the_post();),替换为以下产品查询代码:
<?php // 自定义产品查询 $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'meta_query' => array( array( 'key' => '_price', 'value' => 3000, 'type' => 'numeric', 'compare' => '=' ) ) ); $products = new WP_Query($args); if ($products->have_posts()) { woocommerce_product_loop_start(); while ($products->have_posts()) { $products->the_post(); wc_get_template_part('content', 'product'); } woocommerce_product_loop_end(); wp_reset_postdata(); } else { echo '<p>暂无价格为3000元的商品</p>'; } ?>
- 保存文件后,新建页面「3k Store」,在页面属性的「模板」下拉菜单中选择「3k Store Page」,发布页面即可。
方案三:利用钩子修改全局查询(灵活度最高)
这种方法不需要修改页面内容或模板,直接通过钩子在页面加载时自动修改查询:
- 同样在主题的
functions.php中添加以下代码:
function filter_3k_store_products($query) { // 只在前台、访问3k Store页面(slug为3k-store)且是主查询时生效 if (!is_admin() && $query->is_main_query() && is_page('3k-store')) { $query->set('post_type', 'product'); $query->set('meta_query', array( array( 'key' => '_price', 'value' => 3000, 'type' => 'numeric', 'compare' => '=' ) )); } } add_action('pre_get_posts', 'filter_3k_store_products');
- 新建页面「3k Store」,确保页面的slug是
3k-store(默认会根据标题生成),发布后访问页面就会自动显示价格为3000的商品。
额外说明
- 如果你需要包含变体产品(即父产品下有价格为3000的变体),上面的代码只会显示价格为3000的变体本身。如果想显示父产品,需要调整meta_query,添加对父产品变体价格的判断,比如:
'meta_query' => array( 'relation' => 'OR', // 主产品价格为3000 array( 'key' => '_price', 'value' => 3000, 'type' => 'numeric', 'compare' => '=' ), // 变体产品价格为3000的父产品 array( 'key' => '_min_variation_price', 'value' => 3000, 'type' => 'numeric', 'compare' => '=' ) )
- 修改代码前记得备份主题文件,或者使用子主题开发,避免主题更新导致代码丢失。
内容的提问来源于stack exchange,提问作者Oke Tega
相关产品推荐
相关产品推荐

