1

私は、ページネーションに関して深刻で完全に解決できない問題を抱えていました。

ただし、次の興味深い点に気付きました。

かわいいなどのキーワードで検索します。

?s=cute&submit=Search&post_type=image&paged=2

...リンク先です。"Paged="は、ランダムなページで 404 を返します。しかし、URL をpage=と言うように変更すると

?s=cute&submit=Search&post_type=image&page=2

すべてのページの宛先が機能し、私の心に喜びをもたらしますが、ページネーション タブ リストは常に 0 のままです (現在のページを反映していません)。

コードと設定で "シェル ゲーム" をプレイしているように感じます。

質問は次のように要約されます。

どのような&page=場合でも出力されるようにするにはどうすればよいですか? 逆に、もしそう&paged=なら、どうすれば 404 なしで動作させることができますか?!?!

これは、私が約 3 か月間取り組んできた問題です。人々は答えるのが恥ずかしがり屋です。


アップデート:

ページネーションを壊す URL 内のこのpaged変数を処理しようとして、単純に に置き換えるフィルターを作成しましたpage

function symbiostock_pagination_mod( $args ){

    $args = str_replace('paged=', 'page=', $args);

    return $args;
    }

add_filter( 'paginate_links', 'symbiostock_pagination_mod', 1 );

素晴らしいアイデアのように思えます!しかし、これはすべての新しいクリックで起こります:

?s=cute&post_type=image&page=2&page=2

?s=cute&post_type=image&page=2&page=3

では、これはどこで改造されているのでしょうか。なぜですか?


アップデート:

この問題を経験したことがあるのが私だけかどうかはわかりませんが、(少なくとも自分自身では) 解決しました。以下の解決策をご覧ください。また、与えられた助けに感謝します。:D

4

1 に答える 1

2

これが私が思いついたものです...これをハックまたは回避策と呼ぶこともできますテーマのコード。

以下の関数は ' ' 関数をフィルタリングし、paginate_links()これを実現します。

  1. 変数が検索pagedページでランダムに 404 を生成するのを確認しましたが、アーカイブページと分類ページでは問題なく動作します。それで、それを確認します。、変更を行います...if_search()

  2. これが検索の場合、正規表現 (パーマリンク構造に応じて、paged単に文字列をに置換) を使用して、ページ # と思われる宛先を取得します。障害のある変数を削除し、機能する変数を配置するために使用します。pageremove_query_var()add_query_var()

    これが行われているのは、この奇妙なケースではpage常に適切な結果が生成されるためです。

  3. 次に、編集したリンク先のリンクを返します。

以下の機能:

add_filter( 'paginate_links', 'my_search_pagination_mod', 1 );

function my_search_pagination_mod( $link )
{

    if ( is_search() ) {
        
        $pattern = '/page\/([0-9]+)\//';
        
        if ( preg_match( $pattern, $link, $matches ) ) {
            $number = $matches[ 1 ];
            
            $link = remove_query_arg( 'paged' );
            
            $link = add_query_arg( 'page', $number );
            
        } else {
            
            $link = str_replace( 'paged', 'page', $link );
            
        }
        
    }

    return $link;
}

また、正規表現でここにたどり着いたいくつかの助けに感謝します: PHP 正規表現のヘルプ: "page/2/" から 2 を抽出する簡単な方法

于 2013-04-26T02:23:44.607 に答える