カスタムフィールドの日付でソート
-
こんにちは。
functions.phpを下記のように設定し、
「lunch_info_day」というカスタムフィールド項目を作りました。■functions.php
function my_box() { add_meta_box('lunch_info','日替ランチ入力項目','lunch_info_form','lunch','normal','high'); } add_action('add_meta_boxes', 'my_box'); //「固定項目」メタボックスに表示する内容 function lunch_info_form() { global $post; wp_nonce_field(wp_create_nonce(__FILE__), 'my_nonce'); ?> <p> <label>日付:<input type="text" name="lunch_info_day" value="<?php echo get_post_meta($post->ID,'lunch_info_day',true); ?>" style="width: 20%" /> </label> </p> <?php } //入力データの保存 function my_box_save($post_id) { global $post; $my_nonce = isset($_POST['my_nonce']) ? $_POST['my_nonce'] : null; if(!wp_verify_nonce($my_nonce, wp_create_nonce(__FILE__))) { return $post_id; } if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {return $post_id;} if(!current_user_can('edit_post', $post->ID)) {return $post_id;} if($_POST['post_type'] == 'lunch') { update_post_meta($post->ID, 'lunch_info_day', $_POST['lunch_info_day']); } } add_action('save_post', 'my_box_save');
そして、記事を4つ作成し
「2013/06/17」「2013/06/18」「2013/06/19」「2013/06/20」を
カスタムフィールドに入力しました。しかし、投稿日付順に並んでしまい
カスタムフィールドが無視されてしまいます。<?php query_posts(array( "post_type" =>"lunch", "showposts" =>"7", "meta_value" =>date('Y-m-d'), "meta_key" =>"lunch_info_day", "meta_compare" =>">=", "posts_orderby" =>"meta_value", "order" =>"ASC" ) ); ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <?php the_title(); ?> <?php endwhile; endif; ?>
meta_keyに入れる値が間違っているのでしょうか?
ご教授頂けると幸いです。
-
こんにちは
通常のpostであれば、以下で動作すると思います
query_posts( array( 'meta_key'=>'lunch_info_day', 'orderby' => 'meta_value', 'order' => 'ASC', "showposts" =>"7", ) );
ので、
"post_type" =>"lunch",
を追加するぐらいで、並びませんか?
nobita様 返信ありがとうございます。
上記のソースを使用させていただいたところ
記事の更新順でなく、カスタムフィールドの日付順に並べる事ができました。
ありがとうございます。ただ、私の言葉足らずで大変申し訳ないのですが m( _ _ )m
今日より前の記事は表示しないようにしたかったのです。「2013/06/17」「2013/06/18」「2013/06/19」「2013/06/20」
でしたら、今日は19日ですので、「2013/06/19」「2013/06/20」だけ
表示されるような形です。おそらく
"meta_value" =>date('Y-m-d'), "meta_compare" =>">=",
の部分でそれをやっているのではないかと思ったのですが
nobita様のソースに上記を足しても4件全部出てしまいました。何かの設定が足りないのでしょうか。
何度も申し訳ないのですが、ご教授頂けると幸いです。<?php query_posts( array( 'meta_key'=>'lunch_info_day', 'orderby'=> 'meta_value', 'order'=> 'ASC', "showposts"=>"7", "meta_compare"=> ">", "meta_value"=> '2013/01/01', "type" => "DATE", ) ); ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <p><?php the_title(); echo get_the_date('h i s'); ?></p> <?php endwhile; endif; ?>
という感じでやってみてください
ポイントは、typeみたいです
nobita様 早速返信くださり、ありがとうございます!
教えてくださったtypeをmeta_typeにしたところ
うまくいきました。最後にうまく動いたソースをまとめました。
<?php query_posts( array( 'post_type' =>'lunch', 'orderby'=> 'meta_value', 'meta_key'=>'lunch_info_day', 'order'=> 'ASC', 'showposts'=>'7', 'meta_compare'=> '>=', 'meta_value'=> date("Y-m-d"), 'meta_type' => 'DATE', ) ); ?>
本当にありがとうございました。m( _ _ )m
- トピック「カスタムフィールドの日付でソート」には新たに返信することはできません。