API для переписывания WordPress - необходимо перенаправить «некрасивый» URL на дружественный URL - PullRequest
0 голосов
/ 16 июня 2019

URL добавлен add_rewrite_rule() и с настраиваемыми переменными query_vars работает нормально, но уродливый URL (с параметром в нем) не перенаправляет на "симпатичный URL".

Ниже вы можете найти код, который я взял из одной статьи. Это простой пример.

/**
 * Register custom query vars
 *
 * @param array $vars The array of available query variables
 */
function myplugin_register_query_vars( $vars ) {
    $vars[] = 'city';
    return $vars;
}
add_filter( 'query_vars', 'myplugin_register_query_vars' );

/**
 * Build a custom query
 *
 * @param $query obj The WP_Query instance (passed by reference)
 *
 */
function myplugin_pre_get_posts( $query ) {
    // check if the user is requesting an admin page
    // or current query is not the main query
    if ( is_admin() || ! $query->is_main_query() ){
        return;
    }

    $city = get_query_var( 'city' );

    // add meta_query elements
    if( !empty( $city ) ){
        $query->set( 'meta_key', 'city' );
        $query->set( 'meta_value', $city );
        $query->set( 'meta_compare', 'LIKE' );
    }
}
add_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );


/**
 * Add rewrite tags and rules
 */
function myplugin_rewrite_tag_rule() {
    add_rewrite_tag( '%city%', '([^&]+)' );
    add_rewrite_rule( '^city/([^/]*)/?', 'index.php?city=$matches[1]','top' );
}
add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);

Поэтому, когда вы перейдете на mydomain.com/city/1, вы увидите сообщения с пользовательским мета "городом" со значением 1.

Тот же результат, когда вы вводите mydomain.com/?city=1

Я хочу, чтобы второй адрес (безобразный URL) перенаправлялся на дружественный URL. Также как вы можете наблюдать при попытке открыть mydomain.com/?p=1, который перенаправляет на mydomain.com/slug-of-post-with-id1

...