
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カスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!