web-dev-qa-db-ja.com

価格帯とカスタムメタキーによるWoocommerceクエリ

私は価格帯で製品を入手する機能を書きました。すべての作品、しかし今私は追加のメタキーを追加する必要があります、それは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' );
1
Foxsk8

注目の製品のメタキーは_featuredですが、あなたはあなたのメタクエリでfeaturedを使っています。キーが存在しないため、これは製品を返しません。

また、私の知る限りでは、キーの値はyesなので、引数は次のようになります。

array(
    'key'       => '_featured',
    'value'     => 'yes',
)

もう1つの注意は、ショートコードの属性を取得するための適切な方法を使用することです。あなたは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();を使用する必要があります。

2
Jack Johansson

WC 3.0.0以降

wc_get_min_max_price_meta_query()を使うことができます。 Woocommerceはあなたのために価格の最小/最大meta_queryを作成します。これには税チェックも含まれます。

より多くの情報 ここ

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);
0
Bjorn