WordPressにてpre_get_postsで出力条件を設定しているのですが、
その中で、カスタムフィールド値によって参照する記事日時の範囲を変更したいと考えています。
なにかヒントになることなど、何かお気づきの点がございましたら回答お願いいたします。
やりたいこと
カスタムフィールドの値によって、絞り込む記事の日時範囲を変更したい
(例)
カスタムフィールド値が
hoge1のとき:投稿日が一週間以内の記事
hoge2のとき:更新日が二週間以内の記事
状況
カスタムフィールドA(customfield_key)
「未設定」「更新日」「手動の更新日」があります
カスタムフィールドB(customfield_key_date_time)
カスタムフィールドAで手動を選択したときの日時設定欄です
試したこと
名前付けメタクエリというもので、「複数の meta_key を伴う orderby の指定」ということができるようなので、(https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/WP_Query)
date_queryでもできないかと名前付けメタクエリ(customfield_null,customfield_default,customfield_auto、customfield_manual)と任意の名前を設定し、date_queryで設定しましたができませんでした。
php
1<?php 2//function.phpの一部抜粋 3 4$today_date_time = date_i18n("Y-m-d H:i:s"); 5$after_3weeks_date_time = date("Y-m-d H:i:s", strtotime($today_date_time."-3 week"));//今日の日付から3週間前 6 7$metaquery_setting[] = array( 8 'relation' => 'OR', 9 array( 10 'relation' => 'OR', 11 'customfield_null' => array( 12 array( 13 'key' => 'customfield_key', 14 'value' => "",//カスタムフィールド値が空のもの 15 'compare' => '=' 16 ), 17 ), 18 'customfield_default' => array( 19 array( 20 'key' => 'customfield_key', 21 'value' => "未設定",//カスタムフィールド値が未設定のもの 22 'compare' => '=' 23 ), 24 ), 25 'customfield_auto' => array( 26 array( 27 'key' => 'customfield_key', 28 'value' => "更新日",//カスタムフィールド値が更新日のもの 29 'compare' => '=' 30 ), 31 ), 32 ), 33 array( 34 'customfield_manual' => array( 35 'relation' => 'AND', 36 array( 37 'key' => 'customfield_key', 38 'value' => "手動の更新日",//カスタムフィールド値が手動の更新日のもの 39 'compare' => '=' 40 ), 41 42 array( 43 'key' => 'customfield_key_date_time',//カスタムフィールド日時設定 44 'value' => $after_3weeks_date_time, 45 'compare'=>'>=',//日時設定の値が$after_3weeks_date_time以上(以降)の投稿 46 'type'=>'DATETIME' 47 ), 48 ), 49 50 ), 51 ); 52 53$query->set( 'posts_per_rss', 30 );//30件表示 54$query->set( 'meta_query', $metaquery_setting ); 55 56$query->set('date_query', 57 array( 58 'relation'=>'OR',//以下のいずれか 59 array(//customfield_nullのときは1週間以内に投稿されたもの 60 'customfield_null' => array( 61 'column' => 'post_date_gmt', 62 'after' => '1 week ago', 63 ), 64 ), 65 array(//customfield_defaultのときは2週間以内に投稿されたもの 66 'customfield_default' => array( 67 'column' => 'post_date_gmt', 68 'after' => '2 week ago', 69 ), 70 ), 71 array(//customfield_autoのときは3週間以内に変更されたもの 72 'customfield_auto' => array( 73 'column' => 'post_modified_gmt', 74 'after' => '3 week ago', 75 ), 76 ), 77 array(//customfield_manualのときは3週間以内に変更されたもの 78 'customfield_manual' => array( 79 'column' => 'post_modified_gmt', 80 'after' => '3 week ago', 81 ), 82 ), 83 ) 84 );
他に考えたことなど
- meta_query自体で日時範囲設定ができないか(特定keyのときに期間設定)
……keyの値との比較ならできるが投稿日や更新日との比較などはmeta_queryでできなさそう
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。