サポート » テーマ » カスタムフィールドの日付でソート

  • 解決済 hikonyan0127

    (@hikonyan0127)


    こんにちは。

    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に入れる値が間違っているのでしょうか?
    ご教授頂けると幸いです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • こんにちは

    通常の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

    おぉ!

    共有していただき、ありがとうございます

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「カスタムフィールドの日付でソート」には新たに返信することはできません。