WooCommerce按价格范围和定制元键查询

时间:2017-07-27 作者:Foxsk8

我编写了一个函数,用于按价格范围获取产品。所有的工作,但现在我需要添加一个额外的元密钥,这将是50-100和功能,但代码不会返回任何产品。此代码有什么问题?

    function product_price_filter_box($attr) {
    $limit = intval($attr[\'limit\']);
    $min = intval($attr[\'min\']);
    $max = intval($attr[\'max\']);
    $query = array(
        \'post_status\' => \'publish\',
        \'post_type\' => \'product\',
        \'posts_per_page\' => $limit,
        \'meta_query\' => array(
            \'relation\'      => \'AND\',
            array(
                \'key\' => \'_price\',
                \'value\' => array($min, $max),
                \'compare\' => \'BETWEEN\',
                \'type\' => \'NUMERIC\'
            ),
            array(
                \'key\'       => \'featured\',
                \'value\'     => \'1\',
                \'compare\'   => \'=\',
            ),
        )
    );

    $wpquery = new WP_Query($query);
    while ( $wpquery->have_posts() ) : $wpquery->the_post(); global $product;
        wc_get_template_part( \'content\', \'product\' );
    endwhile;
    wp_reset_query();

}
add_shortcode( \'product_price_filter_box\', \'product_price_filter_box\' );

2 个回复
SO网友:Johansson

特色产品的元密钥是_featured, 但您正在使用featured 在元查询中。这将不返回任何产品,因为密钥不存在。

而且,据我所知,钥匙的价值是yes, 所以你的论点应该是这样的:

array(
    \'key\'       => \'_featured\',
    \'value\'     => \'yes\',
)
另一个注意事项是使用正确的方法获取短代码的属性。您可以使用shortcode_atts() 作用以下是您案例的语法:

$atts = shortcode_atts(
    array(
        \'limit\' => \'20\',
        \'min\' => \'1\'
        \'max\' => \'2\'
    ), 
    $atts, 
    \'product_price_filter_box\' 
);

$limit = intval($atts[\'limit\']);
$min = intval($atts[\'min\']);
$max = intval($atts[\'max\']);
您可能希望限制用户可以获得的最大帖子数。这可以通过使用min() 功能:

$limit = min(20, $limit);
还有最后一句话。如果您正在使用WP_Query, 您应该使用wp_reset_postdata(); 而不是wp_reset_query();, 使用后使用query_posts();.

SO网友:Bjorn

自WC 3.0.0以来

您可以使用wc_get_min_max_price_meta_query(). Woocommerce将为您创建价格最小/最大meta\\u查询。这还包括税务检查。

更多信息here.

下面是一个与OP问题匹配的示例:

$meta_query = array(
  \'relation\'    => \'AND\',
  array(
    \'key\'       => \'your_custom_meta_key\',
    \'value\'     => \'1\',
    \'compare\'   => \'=\',
  ),
);
$meta_query[] = wc_get_min_max_price_meta_query(array(
  \'min_price\' => 100,
  \'max_price\' => 200,
));
$query = array(
  \'post_status\'     => \'publish\',
  \'post_type\'       => \'product\',
  \'posts_per_page\'  => -1,
  \'meta_query\'      => $meta_query,
);
$wpquery = new WP_Query($query);

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post