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