メタフィールドを使用して日付を保存するカスタム投稿タイプを定義しました。
私のfunctions.phpに私は開始日を保存する次のコードがあります。 startdate
フォームパラメータで送信される日付の形式は2010/12/01 9:00 AM
です。
add_action('save_post', 'save_details');
function save_details(){
global $post;
update_post_meta($post->ID, "startdate", $_POST["startdate"]);
}
現在時刻より後のstartdate
ですべてのイベントのリストを出力しようとしています。
query_posts(array(
'post_type' => array('seminar'),
'meta_key=startdate',
'meta_value='.date("Y/m/d h:i A"),
'meta_compare=>'
));
これは、開始日に関係なくすべてのイベントをリストします。何がおかしいのですか?
私が自分のコードを次のように変更した後の何らかの理由で、それはただ動作します。
$args = array(
'post_type' => array('seminar'),
'showposts' => 3,
'meta_key' => 'startdate',
'meta_value' => date("Y/m/d h:i A"),
'meta_compare' => '>',
'orderby' => 'meta_value',
'order' => 'ASC'
);
$seminars = get_posts($args);
私は実際にここで複数の問題が起こっていると思うので、私は@Rarstからの答えを受け入れられたものとして選択するつもりですが、彼はタイトルに関連する問題に最もよく対処しました。
@ sorich87は日付をタイムスタンプとして格納する方法について優れた点がありましたが、結局のところ、date()
関数にformat引数を指定した場合、データをデータベース、それから私はデータを比較することができるはずです。
すべての助けをありがとう。
フォーマットされた文字列として日付を格納しますが、比較のために取るtime()
関数は数値のタイムスタンプを返します。それで、あなたはあまりにも完全に異なるフォーマットの間で比較をしようとしています、そしてそれがそうするのに十分に賢いWPであることはありません。
保存する前に、日付をタイムスタンプに変換します。
add_action('save_post', 'save_details');
function save_details(){
global $post;
update_post_meta($post->ID, "startdate", strtotime($_POST["startdate"]));
}
そして、現在のタイムスタンプを使って比較します。
query_posts(array(
'post_type' => array('seminar'),
'meta_key=startdate',
'meta_value='.time(),
'meta_compare=>'
));
おそらくこれはトリックをするだろうか?
query_posts(array(
'post_type' => array('seminar'),
'meta_key' => 'startdate',
'orderby'=> 'meta_value',
'order' => 'ASC'
));
データベースに値を保存する:
'enddate' => date('Y-m-d');
以下のようなメタクエリを生成します。
一つの条件 :
$conArr[0] = array
(
'key'=> 'enddate',
'value' => date('Y-m-d'),
'compare' => '>=',
);
B.質問:
$args = array(
'meta_query'=>$conArr ,
'post_type'=>'tournament',
'orderby' => 'meta_value_num',
)
重要'orderby' => 'meta_value_num',
および 日付フォーマット は重要です。