web-dev-qa-db-ja.com

カスタム投稿タイプループのページ付け

私はこのトピックについてたくさんの質問を読みました。それらのどれも私の問題を解決しません。

問題 :ページ付けは1ページ目に表示されますが、2ページ目は404を返します。

クエリとループはfront-page.phpにあります。

// WP_Query arguments
$args = array(
  'post_type'              => 'trabajo',
  'posts_per_page'         => '2',
  'paged'                  => ( get_query_var('paged') ) ? get_query_var('paged') : 1,
);

// The Query
$trabajo_query = new WP_Query( $args );
$temp_query = $wp_query;
$wp_query   = NULL;
$wp_query   = $trabajo_query;


// The Loop
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
    }
}
wp_reset_postdata();
the_posts_navigation();

$wp_query = NULL;
$wp_query = $temp_query;  // Reset
1
aitor

私はここで最終的な答えを見つけました: https://wordpress.stackexchange.com/a/217534/77722

フロントページの2ページ目は、私のカスタムクエリからではなく、メインクエリからページ付けをしていました。

私はこれらの行動を取りました:

1.ページがロードされるたびにメインのクエリを取得するために(pageginatedされていても)front-page.phpの名前をindex.php に変更する。

2. CPTの投稿を表示するために、pre_get_posts でメインクエリを変更するには、次の手順を実行します。

add_action( 'pre_get_posts', function ( $q ) {
    if (    $q->is_home() && $q->is_main_query() ) {
        $q->set( 'posts_per_page', 1 );
        $q->set( 'post_type', 'trabajo');
    }
});

3. index.phpで通常のループを行います。

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
    }
}
wp_reset_postdata();
the_posts_navigation();

完璧に動作します!

2
aitor

私はここで回避策を見つけました: カスタム投稿タイプのページ付け404修正?

私はそれを理解していないので、この質問を解決済みとマークしません。これについてのどんな説明も理解されるでしょう。

私は2つの行動を一緒にしなければなりません:

  1. Admin> readingダッシュボードで1を投稿制限に設定します。
  2. この機能を追加します。

add_action( 'parse_query','changept' );
function changept() {
    if( !is_admin() )
        set_query_var( 'post_type', array( 'post', 'trabajo' ) );
    return;
}

それはうまくいきますが、どんな副作用がこれをもたらすかわかりません。

1
aitor