WordPress使用查询参数设置干净的URL并获取值

时间:2019-07-19 06:16:27

标签: php wordpress

在WordPress中,我像这样在ajax中设置了一个查询arg

add_action( 'wp_ajax_get_prepare_link', 'prepare_link');

add_action( 'wp_ajax_nopriv_get_prepare_link', 'prepare_link');

function prepare_link() {
    //Do some logic and get the models name
    $url = add_query_arg( array(
            'models' => aaa-and-bbb-and-ccc,
        ), 'http://example.com/cars/compare/' );
    echo $url;
    wp_die();
}

所以在此之后,我得到了这样的网址

http://example.com/cars/compare/?models=aaa-and-bbb-and-ccc

所以从jQuery中,我正在将页面重定向到这样的响应URL

jQuery('a.compare-vechicles').click(function(e){
    jQuery.ajax({
        type: "POST",
        url: script.ajax_url,
        data: {
            action : 'get_prepare_link',
        },
        success: function(data){
            window.location = data; //Redirect to the prepared link
        }
    });
});

现在,我想将其设置为seo友好的url。因此输出网址应显示如下

http://example.com/cars/compare/models/aaa-and-bbb-and-ccc

因此,我做到了这样

add_action('init', 'custom_rewrite_basic' );

function custom_rewrite_basic() {
    add_rewrite_rule('^compare/([^/]*)/?',
        'index.php?pagename=$matches[1]',
        'top');
}

但是它根本不起作用。那么有人可以告诉我如何实现这一目标吗?还有如何访问模型值?任何帮助或建议都是非常有意义的。

谢谢

1 个答案:

答案 0 :(得分:0)

只需对您的重写功能进行一些修改:

add_action('init', 'custom_rewrite_basic' );

function custom_rewrite_basic() {
    add_rewrite_rule('^compare/([^/]+)/?$',
        'index.php?page=compare&models=$matches[1]',
        'top');

我们通过添加query_vars过滤器来告诉WordPress我们要使用那些GET参数

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

然后使用GET参数“用户”获取值:

get_query_var( 'models' )