web-dev-qa-db-ja.com

カスタム投稿タイプ、ページテンプレート、ページ区切り。 404エラーが発生するのはなぜですか?

私は今日、私がカスタム投稿タイプを表示することで抱えていた厄介な問題に何時間も費やしました。ページ付けを除いて、すべてが美しく表示されているだけでは正しく機能しません。

私はカスタム投稿タイプ( 'ニュース')のために "投稿のページ"( コーデックス:投稿のページ を参照)を表示するためのページテンプレート設定を持っています。

[古い投稿]をクリックしても404エラーが表示され続けます。私は他の多くの人々がこの問題を抱えているか、抱えていることに気づきました。

なんでこんなことが起こっているの?これが私のクエリとループのコードです。

<?php 
    // Enable Pagination
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    // The Args
    $args= array(
        'post_type' => 'news',
        'paged' => $paged,
        );

    // The Query
    query_posts($args); 

    // The Loop
    while ( have_posts() ) : the_post(); ?>
// ...
2
timshutes

私は質問を投稿する数秒前にこの問題を解明したので、私は先に進んで答えをここに投稿すると思いました。私は気付いたのですが、この問題についての総合的な助けはあまりありません。

ページテンプレートにカスタム投稿を表示しようとしたときに[古い投稿]または[新しい投稿]リンクに404エラーが表示された場合は、これが役立ちます。

あなたがそれを持っているならば、これは404問題(ほとんどの場合)を解決するためのステップです。問題が解決するかどうかを確認するためにそれぞれを確認します。

ステップ1:パーマリンクをフラッシュする

設定=>パーマリンクに行きます。デフォルトを選択してください。保存する。テスト。好みを選択してください。保存する。もう一度テストしてください。

ステップ2:クエリを確認してください。

パーマリンクをフラッシュしても問題が解決しない場合は、クエリを再確認してください。コーデックスを使用してください( ページ>投稿のページ を参照)。あなたは$ paged変数を定義し、あなたのクエリオプションでそれを使う必要があります。

ステップ3:あなたのposts_per_pageがデフォルトと衝突していないことを確認してください。

これをwordpressコアのバグとして議論している人たちがいます。そうであるかどうかにかかわらず、xがデフォルトオプションより小さい場合、posts_per_page => xオプションはページ割り付けで問題を引き起こす可能性があります。

この問題に対するハックな解決策は、デフォルトを1に設定することです(設定>読書> "ブログは最大で_ページを表示する")。

NOTE:この時点で、私はまだ問題を抱えていました..それは最終的に私のためにそれを修正したのはステップ4でした。

ステップ4:あなたのページがスラグであることを確認してください!=あなたのpost_type.

私の場合、私はpost_type => 'news'を持っていました。そして私が使っていたページはwww.mysite.com/newsでした。これが矛盾を引き起こし、それが最終的にページネーションを追い払った。修正するために、私は私のpost_typeを 'news-articles'に変更し、パーマリンクを再フラッシュしました。問題は解決しました。

うまくいけば、これはあなたが同じ問題を経験した場合あなたに役立ちます。私は多くの人々がこのスネアに陥っているように感じます - それは簡単で、そして理解するのはそれほど直観的ではありません。 (少なくとも私にとってはそうではありませんでした)。

5
timshutes

ステップ3について。これが起こる理由の説明は次のとおりです。 https://wordpress.stackexchange.com/a/42063/17177 私には有効な実装 "pre_get_posts"が1つ見つかりました http://uncommoncontent.com/2012/01/28/add-custom-ポストタイプからループへ

if ( ! function_exists( 'ucc_add_cpts_to_pre_get_posts' ) ) {
    function ucc_add_cpts_to_pre_get_posts( $query ) {
        if ( $query->is_main_query() && ! is_post_type_archive() && ! is_singular() && ! is_404() ) {
        $my_post_type = get_query_var( 'post_type' );
            if ( empty( $my_post_type ) ) {
                $args = array(
                    'exclude_from_search' => false,
                    'public' => true,
                    '_builtin' => false
                );
                $output = 'names';
                $operator = 'and';
                $post_types = get_post_types( $args, $output, $operator );

                // Or uncomment and edit to explicitly state which post types you want.
                // $post_types = array( 'event', 'location' );
                // Add 'link' and/or 'page' to array() if you want these included.
                // array( 'post', 'link', 'page' ), etc.
                $post_types = array_merge( $post_types, array( 'post' ) );
                $query->set('post_type', $post_types );
            }
        }
    } 
}

add_action( 'pre_get_posts', 'ucc_add_cpts_to_pre_get_posts' );
4
Dmitry Misharov

何時間もの研究の後、私は簡単な解決策を思いついた。

私はこの問題に出くわすべきだれでものためにそれをすべてブログにうまく載せました:)

http://www.jqui.net/wordpress/wp-post-type-pagination/ /

誰かがそれから何らかの喜びを得ることを願っています:)

0
Val