サポート » プラグイン » Typesで本日以降の開催日を出力

  • 解決済 weson12

    (@yoshi00)


    TypesでカスタムフィールドPostTypesを作っています。

    ページを出力する時に、本日以降の開催日だけを出力し、本日に近い開催日の順で出力したいのですが。

    検索すると色々なサイトで紹介されているのですが、どれもうまくいきません。
    https://ja.forums.wordpress.org/topic/22997?replies=6

    検索したサイトを参考にして自分で作ったものです。

    new WP_Query( array(
    'post_type'=>'kaisai',
    'meta_key'=>'wpcf-kaisaibi',
    'meta_value'=>date_i18n('Ymd'),
    'orderby'=>'meta_value',
    'meta_compare'=>'>=',
    'meta_type'=>'DATE',
    'order'=>'ASC'
    ));

    何も表示されません。

    new WP_Query( array(
    'post_type'=>'kaisai',
    'meta_key'=>'wpcf-kaisaibi',
    'meta_value'=>date_i18n('Y-m-d'),
    'orderby'=>'meta_value',
    'compare'=>'>=',
    'type'=>'DATE',
    'order'=>'ASC'
    ));

    など色々試したのですが、何も表示されません。

    どこが間違っているでしょうか?
    ご教授お願いいたします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • いまの情報にないことを想像してみると、kaisaibi というカスタムフィールドは Types の「日付」型なのでしょうね。そうすると、wpcf-kaisaibi に格納されている値は 20150830 や 2015-08-30 のような形式ではなく、UNIXタイムスタンプ形式の数値だと思います。
    そういうわけで、これでどうでしょう?

    new WP_Query( array(
    	'post_type'    => 'kaisai',
    	'meta_key'     => 'wpcf-kaisaibi',
    	'meta_value'   => date_i18n( 'U' ),  // 現在のUNIXタイムスタンプ
    	'orderby'      => 'meta_value',
    	'meta_compare' => '>=',
    	'meta_type'    => 'NUMERIC’,         // 数値として比較
    	'order'        => 'ASC'
    ) );

    トピック投稿者 weson12

    (@yoshi00)

    gblsmさん、できました!!
    ありがとうございます。

    説明不足ですみません。
    おっしゃるとおり kaisaibi は「日付」型です。

    昨日から散々試してできなかったのですが、完璧に表示されました。

    DATEではなく、数値として比較するんですね。
    勉強になりました。

    感謝します。

    トピック投稿者 weson12

    (@yoshi00)

    言い忘れたのですが、

    ‘meta_type’ => ‘NUMERIC’, // 数値として比較

    の部分の’NUMERIC’の「’」はちょっと変なので、コピペされる人は注意してください。

    yoshi00さん、御指摘ありがとうございます。フォーラムへ書き込むときにシングルクォートが自動変換されるのを修正したつもりがひとつ見落としてしまいました。

    WP_Query の meta_compare で比較されるのはカスタムフィールドの「生の値」です。Types で作ったカスタムフィールドの生の値を確かめるには、Types Fields API の output オプションで raw を使うとよいですよ。

    $kaisaibi = types_render_field( 'kaisaibi' );
    $kaisaibi_raw = types_render_field( 'kaisaibi', array( 'output' => 'raw' ) );
    printf( '開催日: %s (%s)', $kaisaibi, $kaisaibi_raw );

    トピック投稿者 weson12

    (@yoshi00)

    ありがとうございます。

    試してみたら
    (%s)
    のところに10桁の日付と関係ない数値が表示されました。
    これが「生の値」ですね。

    Typesはいろいろなことができるので、ほかの場面でも利用させていただきます。

    念のため、日付と関係ある数値です。「unixタイムスタンプ」や「unixエポック」を(探して)読むと日付との関係がわかると思います。

    トピック投稿者 weson12

    (@yoshi00)

    勉強不足ですみません。

    確かに他のmeta_keyで試してみると記述がそのまま出てしまいました。

    勉強します。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「Typesで本日以降の開催日を出力」には新たに返信することはできません。