2013-05-16 9 views
8

私はこのwp_queryで実際の解決策を得るのに苦労しています。私は現在、投稿に割り当てられているカスタム設定を持っています.1つは投稿が「おすすめ」で、2番目が投稿の終了日時です(結果に表示されなくなります)。メタを含み、日付を超える投稿クエリ

WP_Query('meta_key=skyali_feature&showposts=4&orderby=post_date'); 

終了日がmeta_keyどこwp_postmetaテーブルに設定されている:私は機能での作業のクエリを持っていますが、それには、この終了日を作業する必要があり、ここでは、クエリの作業は、「特集」で見つけることです'the_date'でmeta_valuesは'05/16/2013 05:24 'のようになります。 'the_date'が設定されている場合、上記のクエリを編集したいのですが、 'the_date'が今日の日付と時刻より大きい場合にのみ投稿が含まれます。

WP_Query(
    'meta_key=skyali_feature&meta_key=the_date&meta_compare=>=&meta_value=' 
    .date('d/m/Y H:i') 
    .'&showposts=4&orderby=post_date&orderby=the_date' 
); 

答えて

13

が、私は最近、非常によく似た何かをしなければならなかったし、代わりにmeta_queryプロパティを使用する必要が終わった:

は、ここに私の失敗した試みです。私は私の例では、日付でフィルタリングするために必要な

  • ...

    $today = date('Ymd'); 
    $args = array(
        'post_type' => 'post', 
        'posts_per_page' => '4', 
        'meta_key' => 'the_date', 
        'meta_query' => array(
         array(
          'key' => 'skyali_feature' 
         ), 
         array(
          'key' => 'the_date', 
          'value' => $today, 
          'compare' => '>=' 
         ) 
        ), 
        'orderby' => 'meta_value_num', 
        'order' => 'ASC' 
    ); 
    
    $your_custom_query = new WP_Query($args); 
    

    いくつかの注意事項が、あなたがする必要がありますように見えます:あなたはこのような何かをしたいと思いますあなたの日付/時間をしてください。 ($today変数の最初の行は、希望の形式で調整することができます)。

  • showpostsの代わりにposts_per_pageを使用してください。 showpostsは推奨されていません。

  • meta_keyを2回(配列の最上位に1度、meta_query配列の要素として1回)含んでいます。ドンすれば結果をキーでソートできない既知のバグがあります「Tは、このようにそれが含まれています。私は、これは楽しみを持って、助けすぎてしばらくの間、1!

願って戦った!

[編集]は背面にあなたのskyali_featureキーを追加するのを忘れアレイ。日付データ型で、高度なカスタムフィールドプラグインを使用している人々のために、これはあなたが今日以上の日付のために必要なものである

+0

ご回答いただきありがとうございます。私は試しましたが結果はありませんでした。ここに私のバージョンがあります:$ today = date( 'd/m/Y H:i'); $ argsを=配列( 'post_type' => '記事'、 'posts_per_page' => '4'、 'meta_key' => 'the_date'、 'meta_query' =>配列( 配列( 「キー'=> 'the_date'、 'の値'=> $今日、 '比較'=> '> =' ) )、 'orderbyの'=> 'meta_value_num'、 '注文'=> 'ASC' ); – Paul

+0

ああ、私は問題を見ると思う。 * string(* date( 'd/m/YH:i')の出力は文字列として比較されません。あなたの投稿ですか?自由形式のテキストフィールドですか、その形式で日付と時刻を入力するだけですか、それとも実際に日付/時刻(またはタイムスタンプ)フィールドとしてデータベースに格納していますか? –

+0

あなたはスポットでした私の日付形式は駄目です。 – Paul

4

Custom metadata managerを使用している人々のための

$today = date('Ymd'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $today, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 
+0

私は取得できませんhttp://pastie.org/9433564私はACFがこのような状況のためにフレンドリーな日付とタイムスタンプの両方を保存したいと思っています –

+0

これは私にとって完璧に機能しました。 Advanced Custom Fields Pro v5を使用しています。ありがとうございます。 –

1

あなたはdatepickerフィールドことがわかりますタイムスタンプとして格納されます。

同様のケースでは、上記の例は機能しません。比較する必要がある値をPHPで並べ替えることができます。そして、それが仕事やる23:59:59での一日以前のタイムスタンプ:あなたはまた、次の例のように、ブログの使用current_time()のタイムゾーンの設定を考慮したい場合

$yesterday = strtotime('yesterday 23:59:59'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $yesterday, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 

を:

$now = current_time('timestamp'); 
    $yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1); 
関連する問題