サポート » 使い方全般 » search.phpでページ送りの表示が404エラーになる

  • 解決済 aki

    (@akistar02)


    現在search.phpにてカスタム投稿だけを検索対象にさせたいと思っているのですが、
    ページ送りが機能しません。

    
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    
    $args = array(
    'post_type' => 'topics',
    'posts_per_page' => get_option('posts_per_page'),
    'paged' => $paged,
    's' => $_GET['s']); 
    
    $my_query  = new WP_Query($args);
    

    このソースで条件を指定し、

    
    if($my_query->have_posts()):?>
    <?php while ($my_query->have_posts() ) : $my_query->the_post() ?>
    

    こういう風にして表示させ、記事自体は表示されます。
    ポストタイプtopicsのみが表示されます。

    しかし、

    ここのページ送りのソースを元に追加したページ送りで、ページ数は合っているのですが、2ページ目以降が404エラーページに飛ばされてしまいます。

    3記事あり、1ページ1記事表示と設定しており、3ページ分のページャーは出る状態です。
    それで2、3をクリックすると404に飛ばされてしまいます。

    URLは
    1ページ目は
    https://xxxxx/?s=%E5%AE%9F%E6%B3%81

    2ページ目以降は
    https://xxxxx/page/2?s=%E5%AE%9F%E6%B3%81

    となっております。

    1日中ずっと考えているのですが原因がわからず・・・
    おそらくwp_queryがきちんと書き換わってないのかなと思っております。

    アドバイスのほど、何卒よろしくお願いします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • こんにちは

    pre_get_posts フックを使用する方法では駄目なのでしょうか・・・?

    function search_filter( $query ) {
    	if ( !is_admin() && $query->is_main_query() ) {
    		if ( $query->is_search ) {
    			$query->set( 'post_type', array( 'topics' ) );
    		}
    	}
    }
    add_action( 'pre_get_posts', 'search_filter' );
    aki

    (@akistar02)

    ありがとうございます。

    しかしだめでした。
    こちらでも404エラーが表示されます。

    念のためパーマリンクを更新しましたが・・・

    2ページ目を指定したときは$pageにページ番号が確保されている状況でしょうか。
    404ページに転送されてしまって確認できない状況でしょうか。
    2ページ目は
    https://xxxxx/2/?s=%E5%AE%9F%E6%B3%81
    では表示されないでしょうか。
    ご確認いただけますと幸いです。

    aki

    (@akistar02)

    ありがとうございます。
    直接アクセスしても404でした。

    aki

    (@akistar02)

    https://xxxxx/sample-page__trashed?s=%E5%AE%9F%E6%B3%81

    というなぞのページにリダイレクトしていました。

    aki

    (@akistar02)

    ゴミ箱の中のサンプルページという固定ページを削除したら
    https://xxxxx/2/?s=%E5%AE%9F%E6%B3%81
    にアクセスできましたが、404でした。

    “https://xxxxx/?paged=2&s=%E5%AE%9F%E6%B3%81”

    では、どうでしょうか?
    表示された場合、URL をカスタマイズするようなプラグイン(No Category Base 等)やテーマのカスタマイズが影響しているのかもしれません。
    試しに、すべてのプラグインの停止、デフォルトテーマへの変更をしてみてはと思います。

    aki

    (@akistar02)

    テーマをデフォルトにして
    function search_filter( $query ) {
    if ( !is_admin() && $query->is_main_query() ) {
    if ( $query->is_search ) {
    $query->set( ‘post_type’, array( ‘topics’ ) );
    }
    }
    }
    add_action( ‘pre_get_posts’, ‘search_filter’ );

    を書いたら動きました・・・
    使ってるテーマが悪さをしてそうです。

    調査してみます!

    aki

    (@akistar02)

    原因わかりました。
    使ってるテーマにすでに
    function search_filter( $query ) {
    if ( !is_admin() && $query -> is_main_query() && $query -> is_search() ) {
    $query -> set( ‘post_type’, ‘post’ );
    }
    }
    add_action( ‘pre_get_posts’,’search_filter’ );

    が書いてあり、新たに処理を追加

    function search_filter( $query ) {
    if ( !is_admin() && $query->is_main_query() ) {
    if ( $query->is_search ) {
    $query->set( ‘post_type’, array( ‘topics’ ) );
    }
    }
    }
    add_action( ‘pre_get_posts’, ‘search_filter’ );

    してたので変になっていたみたいです。

    aki

    (@akistar02)

    皆さんありがとうございました。
    勉強になりました!

    親テーマのfunctions.phpに書いてある処理の中断方法がわからないので、とりあえずsearch_filterを消して動かしてます。

    本当にありがとうございました。

    aki

    (@akistar02)

    一応報告です。
    親テーマのsearch_filterをremove_actionして
    子テーマに新しいルールとして追加しました。

    希望の動作になりました。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「search.phpでページ送りの表示が404エラーになる」には新たに返信することはできません。