私のワードプレスの知識をさらに深めるために、私はテーマをゼロから開発し、プラグイン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エラーが表示されます。
任意の助けは大歓迎です。ここに何かが足りないような気がします。
これがテンプレートのメインループなので、新しいループを作成するのではなく、既存のループを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