• 解決済 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&#8221;

    では、どうでしょうか?
    表示された場合、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エラーになる」には新たに返信することはできません。