サポート » 使い方全般 » タームの一覧表示でのページナビ

  • 解決済 mizugamiyuki

    (@mizugamiyuki)



    質問失礼します。

    現在カスタム投稿のタームの一覧ページを作っているのですがページナビがどうしても上手く動いてくれません。
    症状としましては以下になります。
    ①URLはhttp://shitsumon.co.jp/sample_cat/red/page/2になっているが1ページ目が表示される。
    ②記事は全部で12個なので3ページ目までしかないはずなのに10ページ目までのページリンクが表示されている。
    になります。
    ページナビにはWp-Page-Naviを使用しております。
    どこかにpagedを記述しないといけないのかもしれませんがどこに記述すれば、どのように記述すればいいのかわからない状態です。

    WordPressの設定は
    1ページに表示する最大投稿数は「1」
    パーマリンク設定は/%category%/%postname%/
    カスタム投稿のタクソノミーはsample_cat
    タームのスラッグはred
    です。

    ソースは下記になります。

    taxonomy-sapmle_cat-red.php

    
    <ul>
    <?php
    $args = array(
    'post_type' => 'smaple',
    'posts_per_page' => 5,
    'tax_query' => array(
    array(
    'taxonomy' => 'sample_cat',
    'field' => 'slug',
    'terms' => 'red'
    )
    )
    );
    
    $domestic_post = get_posts($args);
    if($domestic_post) : foreach($domestic_post as $post) : setup_postdata( $post ); ?>
    <li><a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
    <?php if( has_post_thumbnail() ): ?>
    <?php the_post_thumbnail( 'thumbnail' ); ?>
    <?php else: ?>
    <img src="<?php echo get_template_directory_uri(); ?>/images/noimage.png">
    <?php endif; ?>
    <?php the_title(); ?>
    <?php the_excerpt(); ?>
    </a></li>
    <?php endforeach; ?>
    <?php else : ?>
    <li>表示する記事がありません。</li>
    <?php endif;
    wp_reset_postdata(); ?>
    </ul>
    
    <?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
    

    ご存知の方がいらっしゃいましたらご教授いただけますと幸いです。

    よろしくお願いいたします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • ishitaka

    (@ishitaka)

    こんにちは

    メインクエリをカスタマイズ(pre_get_posts フック等で)するのでは駄目なのでしょうか。

    functions.php に、

    function pre_get_posts_sample( $query ) {
    	if ( is_admin() || ! $query->is_main_query() )
    		return;
    	if ( $query->is_tax( 'sample_cat' ) ) {
    		$query->set( 'posts_per_page', 5 );
    	}
    }
    add_action( 'pre_get_posts', 'pre_get_posts_sample' );
    mizugamiyuki

    (@mizugamiyuki)

    ishitaka様

    ご回答ありがとうございます。

    functions.phpにご教授いただいた通りに記述(コピ-&ペースト)しましたが何も変わりませんでした。

    mizugamiyuki

    (@mizugamiyuki)

    ishitaka様

    ご回答ありがとうございます。

    functions.phpにご教授いただいた通りに記述(コピ-&ペースト)しましたが何も変わりませんでした。

    ishitaka

    (@ishitaka)

    functions.phpにご教授いただいた通りに記述(コピ-&ペースト)しましたが何も変わりませんでした。

    提示のコードはサンプルです。そのままでは動作しません。判定条件(is_tax)や、is_tax で判定しているタクソノミー名(sample_cat)を実際のタクソノミー名に変更する等の変更が必要です。
    また、メインクエリをカスタマイズする方法なので、taxonomy-sapmle_cat-red.php も変更する必要があります。
    まずは、元の archive.php 等をコピーして、taxonomy-sapmle_cat-red.php を作成しページネーションが正しく表示されるかどうか確認してみるといいかと思います。

    mizugamiyuki

    (@mizugamiyuki)

    ishitaka様

    たびたびのご回答ありがとうございます。

    ①URLはhttp://shitsumon.co.jp/sample_cat/red/page/2になっているが1ページ目が表示される。
    の問題はpagedを記述で何とかなりました。
    あとは②の0ページ目までのページリンクが表示されている。だけです。
    ソースはこのように修正しました。

    
    $paged = get_query_var('paged') ? get_query_var('paged') : 1 ;
    $args = array(
    'post_type' => 'portfolio',
    'posts_per_page' => 5,
    'paged' => $paged,
    'tax_query' => array(
    array(
    'taxonomy' => 'portfolio_cat',
    'field' => 'slug',
    'terms' => 'cup'
    )
    )
    );
    

    また、archive.phpは作っていないのですが、必ず必要でしょうか?

    ishitaka

    (@ishitaka)

    メインクエリをカスタマイズするので、サブクエリ(get_posts)する必要はありません。
    まずは、元の archive.php 等をコピーして、taxonomy-sapmle_cat-red.php を作成しページネーションだけが正しく表示されるかどうか確認してみるといいかと思います。

    ishitaka

    (@ishitaka)

    archive.phpは作っていないのですが、必ず必要でしょうか?

    必要かどうかは一概には言えません。下記ページをご覧ください。
    https://wpdocs.osdn.jp/テンプレート階層

    まずは、最小限のコード(下記)でページネーションが正しく動作するか確認するといいかと思います。

    functions.php

    function pre_get_posts_portfolio( $query ) {
    	if ( is_admin() || ! $query->is_main_query() )
    		return;
    	if ( $query->is_tax( 'portfolio_cat' ) ) {
    		$query->set( 'posts_per_page', 5 );
    	}
    }
    add_action( 'pre_get_posts', 'pre_get_posts_portfolio' );

    taxonomy-portfolio_cat-cup.php

    <?php if ( have_posts() ) : ?>
    	<? while ( have_posts() ) : the_post(); ?>
    		<h2><?php the_title(); ?></h2>
    	<?php endwhile; ?>
    <?php endif; ?>
    <?php if ( function_exists( 'wp_pagenavi' ) ) { wp_pagenavi(); } ?>
    mizugamiyuki

    (@mizugamiyuki)

    ishitaka様

    たびたびのご回答ありがとうございます。

    教えていただいたソースでページネーションが正しく動作するか確認したところ正常に動作しました!!

    taxonomy-portfolio_cat-cup.phpのソースはすごくシンプルなんですね。
    でもシンプルにできるのはfunctions.phpに教えていただいたコードを記述するからなんですね。

    教えていただいたfunctions.phpのコードを掘り下げて勉強してみます!

    この度は解決までお付き合いいただき誠にありがとうございました!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • このトピックに返信するにはログインが必要です。