「/ page / 2 /」が機能しないのはなぜですか?


11

最後に、ページネーションが以下のコードで機能するようになりましたが、ページネーションは、存在しない/ videos / page / 2 /にリンクしています。ページ2を機能させるにはどうすればよいですか?

<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query();
$wp_query->query('post_type=videos&showposts=1'.'&paged='.$paged);

while ($wp_query->have_posts()) : $wp_query->the_post();
  //display stuff
endwhile;           

php  wp_pagenavi();
 ?>

そのようなメインクエリをオーバーライドすることはお勧めしませんpre_get_posts。使用を検討しましたか?その後、改ページコードで構築されたのではなく、あなた自身の書き込みを使用することができ、あなたは、標準のポストループにまで簡素化することができます
トム・J Nowell

あなたはすでにのポストのアーカイブが必要ですので、また、WordPressは、ポストタイプのための標準的なアーカイブページを提供し/videos/ているがロードされますarchive-videos.php何のクエリをいじりを必要としないこと、
トム・J Nowell

回答:


15

答えが見つかりました:

WordPressコアを介してデバッグを行った後、この問題を解決することができました。

基本的に、あなたは同じ名前のページとカスタム投稿タイプを持つことができません。変更すると、パーマリンクの書き換えルールが混乱し、404がトリガーされます。

私が使用している非常に単純なソリューションは次のとおりです。カスタム投稿タイプをリストするページは複数(例:製品)で呼び出され、実際の投稿タイプ名は単数(例:製品)です。だから彼らは衝突しないし、それはすべて問題ない。

やった!これが人々の時間を節約することを願っています。


6
カスタムの投稿だけでなく、同じ名前の投稿とページを作成することはできません。
Rutwick Gangurde 2012年

4

長い間、私はこの問題の解決策を見つけました(franzblogに感謝)。

バージョン4.2以降を使用している場合は、functions.phpファイルに次の行を追加する必要があります。

add_filter( 'redirect_canonical', 'custom_disable_redirect_canonical' );
function custom_disable_redirect_canonical( $redirect_url ) {
    if ( is_paged() && is_singular() ) $redirect_url = false; 
    return $redirect_url; 
}

すべてが正常に機能しています。


1

あなたは同じ名前のページとカスタム投稿タイプを持っていることができません

多分何年も前にそれは不可能でしたが、今はできます。

まず、次の行を$args投稿タイプに追加します。

'has_archive' => false,
'rewrite'     => array(
                 'slug'       => 'your slug', // if you need slug
                 'with_front' => false,
                 ),

次に、functions.phpアクションを追加します。

add_action('init', 'custom_rewrite_basic');
function custom_rewrite_basic() {
    global $wp_post_types;
    foreach ($wp_post_types as $wp_post_type) {
        if ($wp_post_type->_builtin) continue;
        if (!$wp_post_type->has_archive && isset($wp_post_type->rewrite) && isset($wp_post_type->rewrite['with_front']) && !$wp_post_type->rewrite['with_front']) {
            $slug = (isset($wp_post_type->rewrite['slug']) ? $wp_post_type->rewrite['slug'] : $wp_post_type->name);
            $page = get_page_by_slug($slug);
            if ($page) add_rewrite_rule('^' .$slug .'/page/([0-9]+)/?', 'index.php?page_id=' .$page->ID .'&paged=$matches[1]', 'top');
        }
    }
}

function get_page_by_slug($page_slug, $output = OBJECT, $post_type = 'page' ) {
    global $wpdb;

    $page = $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts WHERE post_name = %s AND post_type= %s AND post_status = 'publish'", $page_slug, $post_type ) );

    return ($page ? get_post($page, $output) : NULL);
}

ダッシュボードでルールをフラッシュすることを忘れないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.