WordPress重写州和城市的规则

时间:2015-10-09 作者:Jack Arturo

我正在建立一个网站,美国每个州和城市都有一个登录页。我有一个每个城市、州和邮政编码的数据库,设置为WP中的自定义帖子类型。以下是我为每个州成功创建登录页的步骤:

function em_rewrite_rules($rules) {
    $newrules = array();
    $newrules[\'state/(.*)/?\'] = \'index.php?state=$matches[1]\';
    return $newrules + $rules;
}
add_filter(\'rewrite_rules_array\',\'em_rewrite_rules\');

function em_query_vars($vars) {
    array_push($vars, \'state\');
    return $vars;
}
add_filter(\'query_vars\',\'em_query_vars\');

function em_templates($template) {

    global $wp_query;
    if (isset($wp_query->query_vars[\'state\'])) {
        return dirname(__FILE__) . \'/single-state.php\';
    }

    return $template;
}

add_filter(\'template_include\', \'em_templates\', 1, 1);
这很有效。每个页面都是根据中的内容动态生成的single-state.php.

现在我需要以以下格式支持城市:

http://example.com/state/new-york/albany/

我已经找到了很多创建重写规则的不同方法的例子,但所有这些方法都采用了不同的格式。我花了好几个小时才得到上面的工作示例。有人能提出一种方法,我可以实现上述URL格式,并在指定城市时加载自定义模板吗?

1 个回复
SO网友:Jack Arturo

没有我想的那么难。下面是一个工作示例,以防任何人发现它有帮助:

function em_query_vars($vars) {
    array_push($vars, \'state\');
    array_push($vars, \'city\');
    return $vars;
}

add_filter(\'query_vars\',\'em_query_vars\');

function em_rewrite() {

    add_rewrite_rule( \'^state/([^/]*)/([^/]*)/?\', \'index.php?state=$matches[1]&city=$matches[2]\', \'top\' );
    add_rewrite_rule( \'^state/([^/]*)/?\', \'index.php?state=$matches[1]\', \'top\' );
    add_rewrite_tag(\'%state%\',\'([^&]+)\');
    add_rewrite_tag(\'%city%\',\'([^&]+)\');

}

add_action(\'init\', \'em_rewrite\');

function em_templates($template) {

    global $wp_query;
    if (isset($wp_query->query_vars[\'state\']) && isset($wp_query->query_vars[\'city\'])) {
        return dirname(__FILE__) . \'/single-city.php\';
    } elseif (isset($wp_query->query_vars[\'state\'])) {
        return dirname(__FILE__) . \'/single-state.php\';
    }

    return $template;
}

add_filter(\'template_include\', \'em_templates\', 1, 1);

相关推荐