カテゴリページの記事一覧上に固定ページのコンテンツを表示する方法【WordPress】

WordPressでカテゴリーページを充実させたい場合、カテゴリページを固定ページで置き換えたり、プラグイン(Rich Text Tags)でカテゴリページを編集できます。

今回は、「固定ページ」を読み込ませるように設定してみます。

ステップ1:「category.php」を作成

カテゴリーページを開いたときに、「category.php」というファイルがあると、自動的に「category.pbp」の内容が表示されます。

category.phpを作成するには、サーバー上から、「wp-content / themes / {現在のテーマ} /」にcategory.phpのファイルを新規に作成してください。

※category.phpがすでにある場合は、作成しなくてOK

ステップ2:category.phpに固定ページを読み込む処理を追記

次の処理を、category.phpの任意の場所にコピペしてください。

<?php
	$category = get_category($cat);
	$category_slug ="category-".$category->slug;
	$page_info = get_page_by_path( $category_slug);
	if(isset($page_info)){
	$page = get_post($page_info);
	echo apply_filters('the_content',$page->post_content);
	}
?>

ステップ3:固定ページを用意する

固定ページを作成して、カテゴリページで読み込まれるようにするためには、「固定ページのスラッグ(URLのところの名前)」が重要です。

ステップ2でのコードで、「category-カテゴリのスラッグ」と同じスラッグを持つ固定ページのコンテンツを表示する処理をしています。

例えば、次のような「カテゴリ」と「固定ページ」のスラッグが存在するときに、固定ページが読み込まれて表示されます。

  • カテゴリページのスラッグ:job-change
  • 読み込まれる固定ページのスラッグ:category-job-change

注意点

  • 【注意点1】親ページを設定している固定ページでは動作しません。
    ※親ページを設定していると、スラッグが想定と異なるから
  • 【注意点2】固定ページは非公開設定にしましょう
    ※公開してしまうとカテゴリページと、固定ページが重複コンテンツになってしまうため
    例:https://exmample.com/job-change」と「https://exmample.com/category-job-change」どちらも公開されている状態になる。
    ※リダイレクトで対処する方法もあるにはある

お疲れ様でした。

 

最後にXeory_Extensionテーマでのcategory.phpのコードを置いておきます。

<?php get_header(); ?>

<div id="content">

<div class="wrap">


  <div id="main" <?php bzb_layout_main(); ?>>

    <div class="main-inner">
		
		
		
<!-- start original category -->
<?php
    $category = get_category($cat);
    $category_slug = 'category-'.$category->slug;
    $page_info = get_page_by_path($category_slug);
?>
<?php if (isset($page_info)&& !is_paged()): ?>
		<article <?php post_class(); ?>>
			<header class="post-header">
				<?php $page = get_post($page_info); ?>
				<h1 class="post-title" itemprop="headline"><?php echo $page->post_title; ?></h1>
			</header>
				<section class="post-content" itemprop="text">
					<?php     echo apply_filters('the_content', $page->post_content); ?>
				</section>
			</header>
		</article>
		<h2 class="post-title"><?php bzb_title(); ?>の新着記事一覧</h2>
	  
	  <!-- 固定ページがないなら、カテゴリページのヘッダーやコンテンツを表示 -->
		<?php	else: ?>
		<section class="cat-content">
     	 <header class="cat-header">
     	   <h1 class="post-title"><?php bzb_title(); ?></h1>
      	</header>
      <?php if (is_category()) {
    ?>
        <?php bzb_category_description();
    ?>
      <?php 
} ?>
		<?php bzb_category_description(); ?>
		<!-- カテゴリの説明文 -->
		<?php if (is_category() && //カテゴリページの時
          !is_paged() &&   //カテゴリページのトップの時
          category_description()) : //カテゴリの説明文が空でない時 ?>
		<div class="category-description"><?php echo category_description(); ?></div>
		<?php endif; ?>
		</section>
<?php endif; ?>
<!-- end original category -->


		
    <?php
      $t_id = get_category(intval(get_query_var('cat')))->term_id;
      $cat_option = get_option('cat_'.$t_id);
    ?>

    <div class="post-loop-wrap">
  <?php

            if (have_posts()) :

                while (have_posts()) : the_post();

        $cf = get_post_meta($post->ID); ?>
    <article id="post-<?php echo the_ID(); ?>" <?php post_class(); ?> itemscope="itemscope" itemtype="http://schema.org/BlogPosting">

      <header class="post-header">
        <div class="cat-name">
          <span>
            <?php
              $category = get_the_category();
              echo $category[0]->cat_name;
            ?>
          </span>
        </div>
        <h2 class="post-title" itemprop="headline"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
      </header>

      <div class="post-meta-area">
        <ul class="post-meta list-inline">
          <li class="date" itemprop="datePublished" datetime="<?php the_time('c');?>"><i class="fa fa-clock-o"></i> <?php the_time('Y.m.d');?></li>
        </ul>
        <ul class="post-meta-comment">
          <li class="author">
            by <?php the_author(); ?>
          </li>
          <li class="comments">
            <i class="fa fa-comments"></i> <span class="count"><?php comments_number('0', '1', '%'); ?></span>
          </li>
        </ul>
      </div>

      <?php if (get_the_post_thumbnail()) {
    ?>
      <div class="post-thumbnail">
        <a href="<?php the_permalink();
    ?>" rel="nofollow"><?php the_post_thumbnail('big_thumbnail');
    ?></a>
      </div>
      <?php 
} ?>

      <section class="post-content" itemprop="text">
        <?php the_excerpt(); ?>
      </section>

      <footer class="post-footer">
        <a class="morelink" href="<?php the_permalink(); ?>" rel="nofollow">続きを読む ≫</a>
      </footer>

    </article>

    <?php

                endwhile;

            else :
        ?>

    <article id="post-404"class="cotent-none post" itemscope="itemscope" itemtype="http://schema.org/BlogPosting">
      <section class="post-content" itemprop="text">
        <?php echo get_template_part('content', 'none'); ?>
      </section>
    </article>
    <?php
            endif;
        ?>

<?php if (function_exists('pagination')) {
    pagination($wp_query->max_num_pages);
} ?>

    </div><!-- /post-loop-wrap -->



    </div><!-- /main-inner -->
  </div><!-- /main -->

<?php get_sidebar(); ?>

</div><!-- /wrap -->

</div><!-- /content -->

<?php get_footer(); ?>

 

[su_note note_color="#00BFFF" text_color="#ffffff"] 人気の記事

icon-check-circle Google検索の変遷から見えてくる「Googleがキュレーション化する日」
[/su_note]
タイトルとURLをコピーしました