所以我在这里有一个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');
我不知道我做错了什么。请帮助我。
答案 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_id
和real_estate_state_id
......