web-dev-qa-db-ja.com

url wordpressを書き換えるには?

私はWordPressの投稿フィルタをしています。申請書の結果、次のURLが得られました。

http://local/rieltplus/category/catalog/?type=flat&price_min=1000&price_max=2000&area_min=5&area_max=50&room_num=5&etage=2&plan=old

このようにURLを書き換える方法:

local/rieltplus/category/catalog /TYPE&price_min = 1000&price_max = 2000&area_min = 5&area_max = 50&room_num = 5&plan = 2

つまり、TYPE= GETパラメータの型を取得し、それ以外のパラメータは変更されません。私を助けてください...私はそれをする方法がわからない...

1
Igor Fedorov

あなたは add_rewrite_rule()initにフックすべきです

http://local/rieltplus/があなたのホームページで、category/catalog/がカテゴリアーカイブであると仮定すると、これはうまくいくはずです。

add_action('init', function() {
    add_rewrite_rule(
        'category/catalog/([^/]+)?$',
        'index.php?category_name=catalog&type=$matches[1]&price_min=1000&price_max=2000&area_min=5&area_max=50&room_num=5&etage=2&plan=old',
        'top'
    );
});

あなたがそれをどんなカテゴリーでも利用可能にしたいならば、それをコメントでそれに言及してください。

ちなみにlocal/rieltplus/category/catalog/TYPE&price_minlocal/rieltplus/category/catalog/TYPE?price_minとは異なり、local/rieltplus/category/catalog/TYPE/?price_minは有効なURLではありません。

type変数を取得するには、get_query_var( 'type' )を使用しますが、最初にそれをメインクエリに追加します。

add_filter('query_vars', function($vars) {
    $vars[] = "type";
    return $vars;
});

パーマリンク構造をフラッシュするには、パーマリンク構造をsettings > permalinks画面に保存するか、またはflush_rewrite_rules()のみを使用してください。

編集 - の他の質問と同じようにコメント

add_action('wp', function() { // this will work as long as GET type is the first is the query string
    if( "catalog" === get_query_var( "category_name" ) && isset( $_GET["type"] ) ) {
        if( ! empty( $_GET["type"] ) ) {
            $type = strval( $_GET["type"] );
            $url = $_SERVER["REQUEST_URI"];
            $url = str_replace( array( "?type={$type}&", "?type={$type}" ), "{$type}?", $url );
            $url = str_replace( "?&", '?', $url );
            wp_redirect( $url );
            exit;
        }
    }
});
1
Samuel Elh