• カテゴリーページに固定ページの内容を表示させたいと思ってあれこれやっております。
    まず、固定ページにカテゴリーを紐付けできるようにしました。

    function add_categorie_to_pages(){
     register_taxonomy_for_object_type('category', 'page');
    }
    add_action('init','add_categorie_to_pages');

    これを「functions.php」に追記。
    カテゴリーページは元々、カテゴリーに属する記事一覧を表示させていました。

    <ul>
    <?php
    global $query_string;
    query_posts($query_string . '&posts_per_page=5&order=DSCE');
    ?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
      <li class="cf">
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      </li>
    <?php endwhile; endif; ?>
    </ul>

    そして下記のようにやってみたのです。

    <?php if( is_category( '親カテゴリー01' ) ): ?>
      <?php
        $page_id = get_page_by_path( '親カテゴリー01' );
        $page = get_post( $page_id );
        echo '<div id="koteiData">' .$page->post_content. '</div><!-- /#koteiData -->';
      ?>
    <?php else: ?>
      <?php $posts = get_posts( 'posts_per_page=1' ); global $post;?>
      <?php foreach($posts as $post): ?>
      <div id="koteiData">
        <?php the_content(); ?>
      </div><!-- //#koteiData -->
      <?php endforeach; ?>
    <?php endif; ?>

    うまくいったと思ったら、固定ページを作成していない子カテゴリーは、それに属する記事ページを表示してしまう始末。「get_posts」がだめなのか?…

    子カテゴリーに属する固定ページがないなら何も表示しないという条件にしたいのですが、それがどうしても分からず質問させていただきました。

    ご教授いただければ幸いです。
    よろしくお願いいたします。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • あるカテゴリに属する固定ページを表示させる、とのことですね。
    heppokoさんの提示されてたコードの、
    <?php if( is_category( '親カテゴリー01' ) ) else
    のあたりが不明だったので、ひとまず表示させるまでをやってみました。

    以下はhogeカテゴリにある固定ページを一件だけ表示させています。

    <?php if( is_category( 'hoge' ) ): ?>
        <?php
        global $page;
        $args = array(
            'post_type' => 'page', // 固定ページを指定
            'tax_query' => array( // ここでカテゴリを指定, 'カテゴリ'であればもっと簡単にも書けたりします
                'taxonomy' => 'category',
                'terms' => array('hoge'),
            ),
            'posts_per_page' => 1,
        );
        global $post;
        //get_post($args);
        $posts = get_posts($args); // get_postsは配列で戻ってきます
        $post = array_shift($posts); // 一件だけ取り出します
        echo $post->post_title;
        echo '<div id="koteiData">' .$post->post_content. '</div><!-- /#koteiData -->';
        ?>
    <?php endif; ?>

    他の条件などはどんなかんじでしょうか?

    トピック投稿者 heppoko

    (@heppoko)

    ご呈示いただいたソースを試したり、自分でもやってみたりしていたら、お礼が遅くなってしまいました。すみません。しかしそのご呈示いただいたソースを使ってやってみたのですが動作してくれませんでした。

    親子カテゴリーだからか、固定ページが二つ表示されたりと、所々でおかしくなるので、表示させる時は固定ページを全て用意することを前提にし、親カテゴリーかどうかで分岐する形を取ったら、何だかうまく表示されました。「<?php else: ?>」以下のソースはかなり怪しいものがあるのですが…

    <div id="koteiData">
      <?php if( is_category( '親カテゴリー01' ) ): ?>
        <?php $page_id = get_page_by_path( '親カテゴリー01' ); ?>
      <?php elseif( is_category( '親カテゴリー02' ) ): ?>
        <?php $page_id = get_page_by_path( '親カテゴリー02' ); ?>
      <?php elseif( is_category( '親カテゴリー03' ) ): ?>
        <?php $page_id = get_page_by_path( '親カテゴリー03' ); ?>
      <?php else: ?>
        <?php
          $page_i = get_post( get_the_ID() );
          $page_id = get_page_by_path( '$page_i' );
        ?>
      <?php endif; ?>
    
      <?php $page = get_post( $page_id ); ?>
      <?php echo apply_filters( 'the_content', $page -> post_content ); ?>
    </div>

    何はともあれ、ご丁寧にソースまで書いていただいて、重ね重ねありがとうございました。

    ちなみに、今回、カテゴリースラッグと固定ページのスラッグを同名にしています。
    この場合、カテゴリーが優先されるとあったので。
    でも実際にはどうなのでしょうか、これ。あまりよくないのでしょうか?

    親子カテゴリーだからか、固定ページが二つ表示されたりと、所々でおかしくなるので、表示させる時は固定ページを全て用意することを前提にし、親カテゴリーかどうかで分岐する形を取ったら、何だかうまく表示されました

    僕のコードはあれだったみたいですが、結果的にうまく動いたようでよかったです〜。

    ちなみに、今回、カテゴリースラッグと固定ページのスラッグを同名にしています。
    この場合、カテゴリーが優先されるとあったので。
    でも実際にはどうなのでしょうか、これ。あまりよくないのでしょうか?

    なるほど、カテゴリーのスラッグと固定ページのスラッグが同じなのですね。
    そうですね、出来れば分けた方が良いですが、現状でも問題ないのであればそれはそれで良いかと思います。

    /**
    基本的にはカテゴリアーカイブ、固定ページのパーマリンクは別々なので問題ないです。
    が、カテゴリアーカイブのページのパーマリンクを変更すると固定ページと全く同じになってしまうことがあります。
    カテゴリーが優先されるということも調査されたそうで、その辺りまで踏まえた上で利用されるのですと良いかと思います。内部的には「リライトルール」というのがありまして、そこを見ると優先順位などが分かりますので、何か問題が起こった場合に助けになると思います。
    **/

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「カテゴリーページに固定ページの内容を表示させたい」には新たに返信することはできません。