サポート » 使い方全般 » query_posts(WP_Queryクラス)でカスタムフィールドを使った絞り込み

  • 解決済 spicablue

    (@spicablue)


    いつもお世話になります。

    「meta_query」を使った絞り込みがうまく反映されないのですが
    どこが間違っているのか分からず、ご教授お願い致します。

    • オリジナルテーマ
    • カスタム投稿「blog」紐付けられたカスタムタクソノミー「cat_blog」のターム「campaign」の記事
    • カスタムフィールドテンプレートで設定した、キー「limit_date」(date = true、dateFormat = yyyy/mm/dd)で日付入力

    以上の記事を、sidebar.phpで「limit_date」以前の記事を出力したいと考えています。

    sidebar.php

    <?php
    $currnet_date = date_i18n( 'Y/m/d' );//今日を取得
    $campaigns = new WP_Query( array(
    	'post_type' => 'blog',
    	'cat_blog' => 'campaign',
    	'posts_per_page' => 2,
    	'meta_query' => array(
    		'key' => 'limit_date',
    		'value' => $currnet_date,
    		'compare' => '<=',//カスタムフィールドの方が大きい
    		'type' => 'DATE'
    	)
    ));
    if ( $campaigns->have_posts() ) :
    while ( $campaigns->have_posts() ) : $campaigns->the_post();
    ?>
    	<li><a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">キャンペーン情報</a></li>
    	<p>今日は<?php echo $currnet_date; ?>です。有効期限は<?php if (post_custom('limit_date')){echo post_custom('limit_date');} ?>です。</p>
    <?php endwhile; ?>
    <?php else: ?>
    	<p>今日は<?php echo $currnet_date; ?>です。有効期限は<?php if (post_custom('limit_date')){echo post_custom('limit_date');} ?>でした。</p>
    <?php endif; ?>

    出力結果

    <li><a href="http://hogegohe.co" title="hogegohe">キャンペーン情報</a></li>
    <p>今日は2015/07/29です。有効期限は2015/08/28です。</p>
    <li><a href="http://fugafuga.co" title="fugafuga">キャンペーン情報</a></li>
    <p>今日は2015/07/29です。有効期限は2015/06/29です。</p>

    上記のように、
    日付が古くても新しくても絞り込み結果に入れられ、同じように出力されています。
    Codex等では query_posts で書かれているのですが
    全ページで表示する sidebarなので、できれば使わないほうが良いのかなと考えたのですが
    それが間違っているのでしょうか。

    ご指摘のほど、どうぞよろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    $args = array(
     	'post_type' => 'product',
     	'meta_query' => array(
    		'relation' => 'OR',
     		array(
     			'key' => 'color',
     			'value' => 'blue',
     			'compare' => 'NOT LIKE'
     		),
     		array(
     			'key' => 'price',
     			'value' => array( 20, 100 ),
     			'type' => 'numeric',
     			'compare' => 'BETWEEN'
     		)
     	)
      );
     $query = new WP_Query( $args );

    WP_Query 5.12 カスタムフィールドパラメータ のサンプルコードをよく見て下さい。

    meta_query を指定する場合は、array の中に更に、arrayによって key, value などの指定をする形式となります。これは、複数のカスタムフィールドを指定する際にどうしても必要となります。

    補足:WP_Query を使った場合でも、ループ処理の後(endwhile;の後)に wp_reset_postdata(); を行う必要があります。

    トピック投稿者 spicablue

    (@spicablue)

    >jim912さん
    そうですね!複数のカスタムフィールドを使う場合がありますよね。

    完全に見落としていました。
    思い通りの出力になりました。
    ありがとうございます!

    wp_reset_postdata(); のご指摘もありがとうございます。
    うっかり、忘れておりました。

    補足ですが、もう一つ誤っていましたので
    記しておきます。

    'compare' => '>=',//カスタムフィールドの方が大きい

    不等号の向きが反対でした。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「query_posts(WP_Queryクラス)でカスタムフィールドを使った絞り込み」には新たに返信することはできません。