web-dev-qa-db-ja.com

カスタムカテゴリテンプレートでページ付けが機能しない

私のワードプレスの知識をさらに深めるために、私はテーマをゼロから開発し、プラグインACFとCPT UIを使って、シンプルで直感的なバックオフィスインターフェースを作成しました。

私の問題はフロントエンドですが。私は(カスタムクエリを使って)ホームページのページネーションを作成してきましたが、それは完璧に動作します。これはカテゴリページ(category.phpという名前のテンプレート)に関しては当てはまりません。

私は解決策を見つけるために何時間もグーグリングをしてきましたが、パーマリンクに問題がなければすべてがパーマリンクに関連しているようです(デフォルトの構造体/%postname%/を使っています)。

これが私のカテゴリページのコードで、カスタムループとページネーションを含みます。

<?php
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$my_videos = new WP_Query(array(
   'post_type' => 'video', 
   'category_name' => single_cat_title('', false), 
   'posts_per_page' => 6
)); 
 if ( $my_videos->have_posts() ) :  
  while ($my_videos->have_posts()) : $my_videos->the_post();
   show_video_thumbnails();
  endwhile; 
else:  ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

<!-- pagination here -->
<?php   next_posts_link( 'Older Entries', $my_videos->max_num_pages );
        previous_posts_link( 'Newer Entries' );
        wp_reset_postdata(); 
?>

このカテゴリの最初のページでは、すべてうまく機能しています。ページネーションが利用可能で、「古いエントリ」が表示されます。

しかし、リンクをクリックすると、/ category/mycategoryname/page/2にリダイレクトされます(mycategorynameは私のカテゴリ名です)が、404エラーが表示されます。

任意の助けは大歓迎です。ここに何かが足りないような気がします。

3
Tayax

これがテンプレートのメインループなので、新しいループを作成するのではなく、既存のループをpre_get_postsで変更してください。これにより、追加のクエリパラメータがすべて考慮されるようになります。

これを行う方法の例:

add_action( 'pre_get_posts', 'wpse5477_pre_get_posts' );
function wpse5477_pre_get_posts( $query )
{
    if ( ! $query->is_main_query() || $query->is_admin() )
        return false; 

    if ( $query->is_category() ) {
        $query->set( 'post_type', 'video' );
        $query->set( 'posts_per_page', 6 );
    }
    return $query;
}

このコードはあなたのfunctions.phpに入ります。

最初に、これがメインのループであり、管理領域ではないかどうかを確認します。 pre_get_postsは管理者に影響を与える可能性があります。

次に、これがカテゴリの場合は$queryを修正します。

そして$queryを返します。

詳細についてはこちらをチェックしてください: https://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

5
ngearing