特定のカテゴリーを別けて(まとめ記事風に)表示する方法

サイトで、まとめ記事を別に表示してみようと思い立ったので、早速テンプレートを改造してトップページにまとめ記事だけを別くくりで表示するようにしました。(カテゴリー別や特定カテゴリーを除外したり表示する方法については、以前書いた記事にもあり、その延長線上の記事になります。)

特定カテゴリーを別枠で表示させる

使用したテーマは、Twenty Twelve系統になります。カスタマイズで使う関数には、好みがあると思いますが、ここではget_posts()を使用したので、そのコードと作成の流れについて書きます。

1.トップページで特定カテゴリーを表示する位置にコードを挿入

例として、index.phpファイルに「if ( have_posts() )」があるので、その前の位置に下にあるコードを挿入します。get_template_part(‘content’, ‘ここは任意の名前’)を使いテンプレートを読み込むようにしてます。

<?php if ( is_home() ) : ?>
  <?php get_template_part( 'content', 'home' ); ?>
<?php endif; ?>

2.読み込むテンプレートを作成

例として、content-home.phpファイルを作成します。これで、index.phpファイルにあるget_template_part()により、content-home.phpを読み込むことが出来ます。

次にcontent-home.phpファイルに特定のカテゴリーを表示するためのHTMLやコードを記述をしていきます。

3.特定のカテゴリーを表示するコードを作成

表示するカテゴリーを取得をするためにget_categories()を使用します。
取得したカテゴリーをもとにforeachを使いループ処理していきます。

<?php   
$categories = get_categories('slug=matome&child_of=0');  
foreach($categories as $category) :  
?>

get_categories(‘slug=ここにスラッグを記述’)で、表示するカテゴリーを取得するのにスラッグを使用しているので、管理画面の投稿⇒カテゴリーでスラッグを設定しておきます。

そのあと、カテゴリー名を表示したいときは、下のコードを追加します。

<?php echo $category->cat_name; ?>

表示する記事数の設定は、numberpostsで設定します。
下の例は、10記事にしています。

<?php global $post;  
  $args = array( 'numberposts' => 10, 'category' => $category->cat_ID);  
  $mypost = get_posts( $args );?>

カテゴリーの記事の順次取り出して見出しを表示するコードが下になります。

<?php foreach( $mypost as $post ) : setup_postdata($post); ?>  

  <h1 class="entry-title"><time><?php echo the_time('Y年n月j日'); ?></time> <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'twentytwelve' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>  
<?php endforeach; ?>

簡潔にタイトルだけ表示する場合、h1タグにあるコードを下にあるコードに変更します。

<?php the_title(); ?>

例として、content-home.phpファイルの全体のコードが下になります。
表示するスタイルを変えたいときは、好みに合わせて編集や追加してください。

<article id="post-info" <?php post_class(); ?>>

<?php   
$categories = get_categories('slug=matome&child_of=0');  
foreach($categories as $category) :  
?>  

  <header class="entry-header">  
    <h1 id="entry-title"><?php echo $category->cat_name; ?></h1>  
  </header>  

  <?php global $post;  
  $args = array( 'numberposts' => 10, 'category' => $category->cat_ID);  
  $mypost = get_posts( $args );?>

  <header class="entry-header">  
  <?php foreach( $mypost as $post ) : setup_postdata($post); ?>  

    <h1 class="entry-title"><time><?php echo the_time('Y年n月j日'); ?></time> <a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'twentytwelve' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>  

  <?php endforeach; ?>  
  <header class="entry-header">

<?php endforeach; ?> 

<?php wp_reset_query(); ?> 

</article>

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です