追加のクエリ変数を使用した検索結果のかなりのパーマリンク


10

追加のクエリ変数も含む検索URLをwp_redirecttemplate_redirectフックを使用してかなりのパーマリンクに書き換える方法を知りたいのですが。

Nice Searchプラグインからコードを取得しましたが、次のように変更できhttp://example.com?s=africaますhttp://example.com/search/africa

add_action( 'template_redirect', 'my_rewrite' ) );

function my_rewrite() {

        if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
            exit();
        }

    }

しかし、選択ドロップダウンをRelevanssiプラグインと組み合わせて使用して、訪問者が特定の投稿タイプに検索を絞り込むことができるようにしています。これにより、post_typeクエリ変数が追加されますhttp://example.com?s=africa&post_type=features。これにのようなURLを設定しますhttp://example.com/search/africa/section/features

ニース検索コードにより、post_typeクエリ変数が失われます。だから私は次のコードを試しました:

function my_rewrite() {

    if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
        if ( isset( $_GET['post_type'] ) and '' !== $_GET['post_type'] ) {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) . '/section/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 'post_type' ) ) ) );
        } else {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
        }
        exit();
    }

}

しかし、WordPressは現在、検索用語はであると考えていますafrica/section/features

検索語とクエリ変数をすべて素敵なパーマリンクに保持する方法はありますか?

おかげでサイモン

回答:


7

検索書き換えルールを変更するには、search_rewrite_rulesフィルターにフックします。投稿タイプに一致する追加の書き換えルールを自分で追加するか、投稿タイプも含めるようにデフォルトの「検索書き換え構造」を変更してからルールを再生成することができます(4つのルールがあります。1つは標準、1つはページング付き)フィード用に2つ)。のでWP_Rewrite::generate_rewrite_rules() 、すべての「ディレクトリレベル」でルールを生成し、あなたがのためにルールを取得します/search/[keyword]/section/[post_type]//search/[keyword]/section//search/[keyword]/。真ん中のルールは必要ありませんが、そのままにしておいても害はありません。

add_filter( 'search_rewrite_rules', 'wpse15418_search_rewrite_rules' );
function wpse15418_search_rewrite_rules( $search_rewrite_rules )
{
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag( '%post_type%', '([^/]+)', 'post_type=' );
    $search_structure = $wp_rewrite->get_search_permastruct();
    return $wp_rewrite->generate_rewrite_rules( $search_structure . '/section/%post_type%', EP_SEARCH );
}

ルールを確認するには、書き換えアナライザープラグインを使用します

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