WordPress
カスタマイズ事例

WORDPRESS CUSTOMIZATION

ニュース記事の中で、特定の記事をいつも上に置けるようにする

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を呼べば完成です。

【100ウェブ新着情報メルマガ】

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