この実装、面倒なら代行します
サイトを運用していて、追加の要望が生まれたとします。
たとえば、
「今は日付の最新順で5件表示してもらってるお知らせ欄ですが、重要なお知らせ事項が発生して、これだけずっと固定で表示させておきたいんだけど、できますか?」
という要望。
この場合は、お知らせ投稿に「TOP固定」というチェックボックスを設けて、それにチェックがある記事について、TOPに固定するように処理を入れればいいわけです。
カスタムフィールドでフィールドタイプを「真/偽」にして、以下のように記述すればいけるはず。
$count=6; //表示件数 $posts_news = get_posts( array( 'post_status' => 'publish', 'category' => '1', 'posts_per_page' => $count, 'orderby' => 'desc', 'meta_query' => array( array( 'key'=>'fix_top', //TOP固定 'value'=>'1', 'compare'=>'=' ), 'relation'=>'AND', ) )); $fix_count=count($posts_news); if($fix_count<$count){ $add_posts_news = get_posts( array( 'post_status' => 'publish', 'category' => '1', 'posts_per_page' => $count-$fix_count, 'orderby' => 'desc', 'meta_query' => array( array( 'key'=>'fix_top', 'value'=>'1', 'compare'=>'!=' ), 'relation' => 'AND', ) )); } $posts_news = array_merge($posts_news,$add_posts_news); if($posts_news){ foreach( $posts_news as $p ){ /* 省略 */ } }
ところが、これですと、「TOP固定」でない記事はまったく表示されません。
20行目から33行目でTOP固定じゃない記事を取得しようとしているんですが、カスタムフィールドのキー自体が存在しない記事に関しては完全スルーになってしまうんです。
つまり、過去の記事については、さっき新規で追加したカスタムフィールド自体が存在しないので、絞り込み条件対象外となり完全にスルーされてしまうと、そういうことです。
だったら、「存在しない」という条件も追加すればいい、ということになります。
答えはこちら。
$count=6; $posts_news = get_posts( array( 'post_status' => 'publish', 'category' => '1', 'posts_per_page' => $count, 'orderby' => 'desc', 'meta_query' => array( array( 'key'=>'fix_top', 'value'=>'1', 'compare'=>'==' ), 'relation'=>'AND', ) )); $fix_count=count($posts_news); if($fix_count<$count){ $add_posts_news = get_posts( array( 'post_status' => 'publish', 'category' => '1', 'posts_per_page' => $count-$fix_count, 'orderby' => 'desc', 'meta_query' => array( array( 'key'=>'fix_top', 'value'=>'1', 'compare'=>'!=' ), array( 'key' => 'fix_top', 'compare' => 'NOT EXISTS' ), 'relation' => 'OR', ) )); } $posts_news = array_merge($posts_news,$add_posts_news); if($posts_news){ foreach( $posts_news as $p ){ /* 省略 */ } }
31-34行目で、 ’compare’ => ‘NOT EXISTS’ と記述し、’relation’ => ‘OR’ にすることで、カスタムフィールドのキー自体が存在していない記事についても条件合致で拾ってくれるようになります。
カスタムフィールドの運用途中での追加って結構あると思います。
憶えておくと便利です。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。