0

私はそのようなコードを持っています

     <?php 
     global $wp_query;
     $args = array_merge( $wp_query->query_vars, array( 'post_type' => array( 'post', 'project') ) );
     $wp_query = new WP_Query( $args );
     if ( have_posts() ) : while ( have_posts() ) : the_post(); 
     ?>

私が持っているループの後

      <?php             
    $permalink_structure = get_option('permalink_structure');
    $format = empty( $permalink_structure ) ? '?paged=%#%' : 'page/%#%/';

            echo paginate_links( array(
                'base' => get_pagenum_link(1) .'%_%',               
                'format' => $format,
                'current' => max( 1, get_query_var('paged') ),
                'total' => $wp_query->max_num_pages,
                'prev_text'    => __('«'),
                'next_text'    => __('»'),
                'show_all'     => false,
                'mid_size'     => 2,
                'end_size'     => 1,
            ) );

    ?>

問題は、1 ページあたり 6 つの投稿と 18 のプロジェクトと 3 つの投稿がある場合、paginate_linksは (6+18)/3 ページ、つまり 8 ページを生成するため、2 をクリックしてページ番号 2 に移動することです。 . しかし 3 をクリックすると .. エラー 404 が表示されます. paginate_linksが必要な量のページ リンクを生成しますが、1 と 2 のように 6/3 ページの単語へのリンクのみを生成するかのように. 問題はカスタム投稿タイプが原因であることは確かです追加されましたが、その問題がどこにあるのかわかりません。何が問題なのですか?

4

1 に答える 1

1

カスタム投稿タイプを含めるには、「メインクエリ」(「メインクエリ」内で「サブクエリ」を使用)を変更する必要があるようです。これにより、ページネーションリンクが機能します。

フックを使用して「メインクエリ」を変更することができますpre_get_posts

add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
    if($query->is_main_query() && $query->is_home()){ // <-- EDIT this condition to your needs
        $query->set( 'post_type', array( 'post','projects' ) );
    }
}

このコードをfunctions.php現在のテーマ ディレクトリのファイルに配置します。

これは、フロントページでページネーションを使用していることを前提としています。

 http://example.com/page/5

$query->is_home()フロントページにいるかどうかを確認する条件があります。別のページにいる場合は、必要に応じてこの条件を変更できます。

ps:テーマファイルでそれを行っているため、あなたの方法は機能していないと思います。ページネーションリンクの範囲を変更するには「遅すぎます」。

于 2013-02-16T15:23:02.257 に答える