Wordpress Url重写

时间:2012-10-24 21:05:50

标签: php regex wordpress

所以我在这里有一个Wordpress页面:

http://12.ourgreenville.com/real_estate/

我希望能够在URL中放置两个变量(城市/州),然后工作 跟他们。网址如下所示:

http://12.ourgreenville.com/real_estate/1/2/

请告诉我需要什么。我把你的代码放在functions.php中 如下:

function add_rewrite_rules( $wp_rewrite )
{
    $new_rules = array(
                     '('.$template_page_name.')/real_estate/(.*?)/?([0-9]{1,})/?$' =>'index.php?p=5351city='.$wp_rewrite->preg_index(1).'&state='.$wp_rewrite->preg_index(2)
                 );

 $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'add_rewrite_rules');

function query_vars($public_query_vars) {

    $public_query_vars[] = "city";
    $public_query_vars[] = "state";
    return $public_query_vars;
}
add_filter('query_vars', 'query_vars');

我不知道我做错了什么。请帮助我。

1 个答案:

答案 0 :(得分:1)

您错过了一个非常重要的步骤 - 刷新规则以激活对它们的更改。这是我的工作变体,适合您的情况:

add_action('init', 'prefix_attach_page_rules');
add_filter('query_vars', 'prefix_attach_page_query_vars');
add_action('parse_request', 'prefix_attach_page_request');

function prefix_attach_page_rules()
{
    add_rewrite_rule('^' . urlencode(get_option('non_latin_data')) . '/(\d+)/(\d+)/?$', 'index.php?prefix_view=my_special_id&prefix_city_=$matches[1]&prefix_state=$matches[2]', 'top');


    flush_rewrite_rules(); // IMPORTANT
}

function prefix_attach_page_query_vars($query_vars)
{   
    $query_vars[] = 'prefix_city';
    $query_vars[] = 'prefix_state';  
    return $query_vars;
}

function prefix_attach_page_request(&$wp)
{
    // If the page request is really from our rewrite url
    if(!array_key_exists('prefix_view', $wp->query_vars))
        return;

    $city= $wp->query_vars['prefix_city'];
    $state = $wp->query_vars['prefix_state'];

    // we are on the rewrite rule
    exit; // in case very custom page like include
}

前缀,在程序实现的情况下,非常重要。您可以放置​​任何您喜欢的内容,但它可以让您摆脱重复的常用名称。

使用您应该能够使用的所选操作或过滤器并不是必需的,但重要的是使您的规则具有更高的优先级(顶部)并刷新规则。

prefix_attach_page_rules会告诉Wordpress我们的规则

在这种情况下,在给定的查询变量解析时,

prefix_attach_page_request将完成我们的工作。

还有另一个StackOverflow:WordPress Answers - 专门用于WordPress,你也可以找到很多解决方案。

附加(基于评论链接的正则表达式):

add_rewrite_rule('^real_estate/(\d+)/(\d+)/?$', 'index.php?prefix_view=real_estate&real_estate_city_id=$matches[1]&real_estate_state_id=$matches[2]', 'top');

然后你应该在查询变量和page_request中搜索real_estate_city_idreal_estate_state_id ......