web-dev-qa-db-ja.com

カスタム投稿タイプアーカイブ404's paginate_links

paginate_links関数 を使用して、カスタム投稿タイプのアーカイブにページ区切りを作成します。2ページ目を表示するときに404エラーが発生しても問題ありませんトレイル)。

私はチェックして研究しましたが、どこにもたどり着いていないようです。 archive-MY_CUSTOM_POST_TYPE.phpの中でループの前に私の問い合わせをしています:

<?php

global $wp_query;

$args = array_merge( $wp_query->query, array( 'post_type' => 'sales', 'posts_per_page'  => 1, ) );

query_posts( $args );


if (have_posts()) :
while (have_posts()) : the_post();  

そしてループendifの後とwp_reset_queryの上に私が持っているより低い

<?php endif; ?>

<div class="clear"></div><!-- / clear -->

<div class="pagination">

<?php 
global $wp_query, $wp_rewrite;
$wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] :    $current = 1;

$pagination = array(
'base' => @add_query_arg('page','%#%'),
'format' => '',
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => true,
'type' => 'plain'
);

if( $wp_rewrite->using_permalinks() )
$pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );

if( !empty($wp_query->query_vars['s']) )
$pagination['add_args'] = array( 's' => get_query_var( 's' ) );

echo paginate_links( $pagination );
?>

</div><!-- / paginate -->  

私のloop-index.phpではこれは問題なく動作しますが、Custom Post Typeの内側のループでは問題ありませんので読んだので重複したスラグと衝突することはありません。ループの前に投稿をクエリする方法、ポインタについてはどうすればよいですか。

よろしく
マーティン

5
MartinJJ

同じ問題として他の誰かが私の完全な回避策であるならば:
1)wp-admin >> settings >> readingで1として表示するようにブログ投稿を設定します。
2)次に、loop-blog.php内のこれをposts_per_page => 10に上書きします。
3)カスタム投稿タイプのloop.phpファイルで、posts_per_page => 5と設定します。

これらは私が必要とする設定であることを忘れないでください、あなたのニーズは異なるかもしれません、一番下の行は、1にwp-adminのブログ投稿を設定し、あなたはあなた自身のニーズに他の数のposts_per_pageを設定できます

今はすべてうまくいっていますが、少々ハックですが、少なくともうまくいきます。次の質問は>>>です。これはwpのバグですか?

3
MartinJJ

Martinの修正は機能しますが、より良い解決策はpre_get_posts関数を使用することです。

例:

function custom_type_archive_display($query) {
    if (is_post_type_archive('custom_type')) {
        $query->set('posts_per_page',1);
        return;
    }
}

add_action('pre_get_posts', 'custom_type_archive_display');
5
Nathan Hangen

私はこれが古いことを知っていますが、私は同じ問題を抱えていて404を引き起こしていたページのパーマリンクを変更することによってそれを解決しました。

これは、明らかに、カスタム投稿タイプと同じ名前のページスラッグを作成できないためです。

すべてのクレジットは、元のソリューションを共有するためのライアンS.に行きます: http://www.sutanaryan.com/2013/09/404-error-in-custom-post-type-pagination-wordpress/ /

0
RAMIREZ