tontoro
フォーラムへの返信
-
フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいkz様
お騒がせしてすいません。自己解決しましたので、報告までに記載しておきます。
‘save_post’でフックしているところに、プラグインの「カスタムフィールドテンプレート」でフックしているものと同じ優先順位をつけるとうまくいきました。
add_action( 'save_post', 'func_save_metadata', 100, 2 );
フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいkz様
いちおう自分なりにコードを書いてみました。
プラグインの「カスタムフィールドテンプレート」と衝突しているようで、終了日が上手くセットされません。出来れば、プラグインの「カスタムフィールドテンプレート」を有効にして、日付の入力をグラフィカルに行えれば幸いです。function func_save_metadata( $post_id ) { $mydata = get_post_meta( $post_id, 'イベント日',true); if($mydata){ if ( ! get_post_meta( $post_id, 'イベント終了日' ) ){ if ( !add_post_meta( $post_id, 'イベント終了日', $mydata, true ) ){ update_post_meta( $post_id, 'イベント終了日', $mydata ); } } }else{ if(get_post_meta( $post_id, 'イベント終了日' ) ){ delete_post_meta( $post_id, 'イベント終了日'); } } } add_action('save_post', 'func_save_metadata');/*更新ボタンが押されたときに実行*/
フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいkz様
返信ありがとうございます。
まさに、イベント日が一日でも、endにstartと同じ値を手動で入れる使用に変えようとしていました。ちなみに、どのようにすれば保存時、end が未入力なら start の値を自動で保存できるのでしょうか。
自分のスキルでは、難しすぎるので、教えていただければ幸いです。フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいkz様
なんども質問すいません。
ちなみにですが、上記の方法だと、クエリ変数を表示する段階で、if ( ! get_post_meta( get_the_id(), ‘end’ ) )
上記の条件で表示、非表示を行っていますが、これだと抽出した記事には、不要な記事もふくまれていることになります。
ページネーションなど「何ページ中の何ページを表示しています」というところで、1ページあたりの記事の表示数が変わったりしてしまいます。
具体的には、1ページ中10記事表示のページもあれば、8ページしかないページもあったりという具合です。もちろん、抽出した記事数は正しく10件で表示時に上記の条件で非表示にしているので正しい動きといえばそうなのですが、、、なので、クエリ変数には、抽出したい条件の記事だけをセットしたいと試行錯誤しておりました。
array_mergeでそれぞれ読み出したクエリ変数を結合させることはできたのですが、ここから上記の’end’のカスタムフィールドがない場合を除くのは、どのようにすれよいのでしょうか。そもそも考え方が間違っているような気もしますが、アドバイスいただければ幸いです。
フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいkz様
丁寧な返信ありがとうございます。
フィールドが無い、のをヒトコトでヤルのは色々とアレなんですね。教えていただいたように、それぞれの条件で取り出して表示してみます。
ありがとうございました。
フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいkz様
さっそくの返信ありがとうございます。
そしてすいません。私の説明不足です。
ポストごとに、カスタムフィールドが設定されており、
それぞれのポストは、イベントの開始日だけのもの、終了日もあるものが混在している状態です。その中で、具体的には、「すでに終了しているイベント一覧」を表示させようと思いっています。
このページの先頭のほうで、kz様が書かれておられたソースを参考に以下のような関数で抽出しようと試みているのですが、「終了日がセットされていない」という条件がうまく抽出できてないようです。
ソースで抽出しようとしているのは、以下の2つです。
〇イベントの開始日が今日より古く、かつ終了日がセットされていない記事
〇イベントの終了日が今日より古い記事お手数おかけしますが、よろしくお願いいたします。
function my_posts_where($where = ''){ global $wpdb; $today = date('Y/m/d'); $where .= // (開始日 < today) and (終了日がセットされていない) "AND $wpdb->posts.ID IN( SELECT id_start FROM (SELECT post_id AS id_start FROM $wpdb->postmeta WHERE meta_key='イベント日' AND meta_value <= '$today') AS t1 INNER JOIN (SELECT post_id AS id_end FROM $wpdb->postmeta WHERE meta_key='イベント終了日' AND meta_value = '') AS t2 ON (t1.id_start = t2.id_end) )"; $where .= // (終了日 < today) "OR $wpdb->posts.ID IN( SELECT id_start FROM (SELECT post_id AS id_start FROM $wpdb->postmeta WHERE meta_key='イベント終了日' AND meta_value < '$today') AS t1 )"; return $where; }
フォーラム: プラグイン
返信が含まれるトピック: 今日の日付に該当する記事を表示したいよろしければ教えてください。
終了日が設定されていない場合
正確には、終了日のカスタムフィールドがない場合に、どのように抽出するのか
教えてください。上記にありましたように、カスタムフィールドが存在して、終了日が空欄ならば
以下のような条件文で抽出できると思うのですが、
——————————————————
1日のみイベントの終了日のフォーマットが空欄なら
(meta_value >= ‘$today’ OR meta_value = ”)
——————————————————
開始日のカスタムフィールドが存在して、終了日のカスタムフィールドが存在しない
場合は、どのように条件文を書けばよいのでしょうか。SQLを勉強中ですが、
(meta_key = ‘イベント終了日’ AND meta_value IS NULL)
などではうまく抽出できません。すいませんが、よろしくお願いいたします。