この実装、面倒なら代行します
WordPressでサイトを運営していれば、ほとんどの場合、投稿を利用して「お知らせ」の投稿をおこない、トップページに最新のお知らせと題して最新5件程度掲載していることと思います。
さて、そういう運営をしながら、たまにとても大事なお知らせ記事があって、しばらくの間常に一番上に掲載しておきたい、なんてこともあると思います。
今回はその方法についてご紹介。
まずアドバンストカスタムフィールドをインストールしましょう。
カスタムフィールドを作成します。
フィールドタイプを「真 / 偽」に、フィールド名を “top” とでもしておきます。
今回は、「カスタム投稿『news』の記事5件を表示、ただし、優先的に上に表示したい記事があればそれを上に表示し、残りの記事を最新記事で埋める」という仕様でやってみます。
テーマのfunctions.phpに次のようなショートコードを作成します。
if ( ! function_exists( 'display_news' ) ){ function display_news() { //上に掲載したい記事を全件取得 $toplist_always = get_posts( array( 'post_status' => 'publish', 'post_type' => 'news', 'posts_per_page' => -1, 'orderby'=> 'desc', 'meta_query' => array( array( 'key'=>'top', 'value'=>'1', 'compare'=>'==' ), ), )); $html='<ul>'; $id_array = array(); if($toplist_always){ foreach( $toplist_always as $p ){ setup_postdata($p); $id_array[] = $p->ID; $link_to = get_the_permalink($p->ID); $html .= '<li><a href="'.$link_to.'">'.get_the_title($p->ID).'</a></li>'; } } $count_always = count($toplist_always); $count = 5 - $count_always; //5件表示のうち、上に表示した件数を引いた残りを計算 $toplist = array(); //上に表示した記事が5件に満たなければ、残りの件数分だけ最新記事を取得 if($count > 0 ){ $toplist = get_posts( array( 'post_status' => 'publish', 'post_type' => 'news', 'posts_per_page' => $count, 'orderby'=> 'desc', 'exclude' => $id_array, //上に表示した記事を除く )); } if($toplist){ foreach( $toplist as $p ){ setup_postdata($p); $link_to = get_the_permalink($p->ID); $html .= '<li><a href="'.$link_to.'">'.get_the_title($p->ID).'</a></li>'; } wp_reset_query(); } $html.='</ul>'; return $html; } add_shortcode('display_news', 'display_news'); }
後はテンプレート側でこのショートコードdisplay_newsを呼べば完成です。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。