サポート » 使い方全般 » 今日から1ヶ月以内のカスタム投稿を表示

  • 解決済 makiko_sho

    (@makiko_sho)


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

    現在以下のコードで、index.phpに「今日よりも古い投稿を表示しない」ようにしています。
    このコードでは、条件通り、きちんとデータが表示されています。

    <?php
    global $post;
    $meta_key = 'hogehogedate';
    $today = date_i18n('Ymd');
    
    $mydata = get_posts( array(
    	'posts_per_page' => -1,
    	'post_type'=> 'member-hogehoge',
    	'meta_key' => $meta_key,
    	'orderby' => 'meta_value',
    	'order' => 'ASC',
    	'type' => 'DATE',
    	'meta_compare' => '>=',
    ) );
    if( !empty( $mydata ) ) {
    	foreach( $mydata as $post ) {
    		setup_postdata( $post );
    
    //表示するデータ
    }
    wp_reset_postdata();
    ?>

    この度、「今日から1ヶ月間のカスタム投稿を表示する」ようにすることとなり、ネット上でいろいろ期間を指定して投稿を表示する情報を元に、以下のコードにしたのですが、データが表示されませんでした。
    単純に「date_query」を追加して、「array」以下を指定しましたが、エラーが出るわけでもなく、データが表示されない状態です。(画面が真っ白ではなく、この部分のデータが表示されない状態です。)

    <?php
    global $post;
    $meta_key = 'hogehogedate';
    $today = date_i18n('Ymd');
    $ones_month = date('Ymd', strtotime('+1 month'));
    $mydata = get_posts( array(
    	'posts_per_page' => -1,
    	'post_type'=> 'member-hogehoge',
    	'meta_key' => $meta_key,
    	'orderby' => 'meta_value',
    	'order' => 'ASC',
    
    	'date_query' => array(
    		array(
    		       'compare'=>'BETWEEN',
    		       'inclusive'=>true,
    		       'before'=> $today,
    		       'after'=> $ones_month
    		),
    	),
    ) );
    if( !empty( $mydata ) ) {
    	foreach( $mydata as $post ) {
    		setup_postdata( $post );
    
    //表示するデータ
    }
    wp_reset_postdata();
    ?>

    PHPはコピペ専門なので、基礎が分かっていない状態です(;´Д`)
    どの辺が良くないのか、ご指摘・ご教授いただけますと幸いです。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック投稿者 makiko_sho

    (@makiko_sho)

    すみません。
    提示しているコードで、
    'meta_value' => $today,
    が抜けていました。

    ただ、追加しても同じ状態なので、問題の箇所ではなかったようです。

    引き続き、よろしくお願い致します。

    LABE

    (@latobeam)

    カスタムフィールドの値が Ymd 形式の日付なのですね。
    しかし date_query は投稿日時が対象なので、カスタムフィールドの値と比較することはできません。
    この場合は meta_query を使いましょう。

    $mydata = get_posts( array(
        'posts_per_page' => -1,
        'post_type' => 'member-hogehoge',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => array(
            'relation' => 'AND',
            array(
               'key'     => $meta_key,
               'value'   => $today,
               'type'    => 'numeric',
               'compare' => '>=',
            ),
            array(
               'key'     => $meta_key,
               'value'   => $ones_month,
               'type'    => 'numeric',
               'compare' => '<=',
            ),
        ),
    ) );

    ちなみに、一つ目のコードも実は間違っています。
    meta_query を使わなければ 'type' => 'DATE' という指定方法は存在しません。
    しかし、カスタムフィールドの値の形式が Ymd であり、これはデフォルトである文字列として比較ができますので、問題が発生しなかったようです。

    トピック投稿者 makiko_sho

    (@makiko_sho)

    早々に返信いただいていたのにも拘らず、お返事遅くなり申し訳ありません。

    さきほど、LABEさんにご提示いただいたコードを拝見しながら、どこで何を指示いしているかネットで調べながら適用してみました。
    無事、希望の通りの形で出力できました!

    data_queryは投稿日時が対象だったのですね。
    私はてっきり「日付」が対象だと思っていたので、値の形式を日付にしてカスタムフィールドを作っていましたが、そもそもそこが間違っていたとは…。
    meta_querydata_queryは、似たようなものなのかと思っていたのですが、名前が違ければ扱うデータも違うのは当たり前ですね。
    コピペばかりに頼っていて、そういう当たり前もわかっていないとは、まだまだ勉強不足です。

    ご丁寧にコードをご提示いただいた上に、細かい所までお教えいただきましてありがとうございました。
    まだまだ奥が深いPHP(WordPress)、ますます楽しくなりました。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「今日から1ヶ月以内のカスタム投稿を表示」には新たに返信することはできません。