Last Query_var不使用重写的URL

时间:2016-11-21 作者:Stephen

我正在尝试获取自定义URL以加载特定的模板页面,我主要在那里,但我的最后一个query_var 在字符串中拒绝加载。以下是我的函数文件中的内容:

function custom_query_vars_filter($vars) {
  $vars[] = \'issueloc\';
  $vars[] .= \'issuearea\';
  return $vars;
}
add_filter(\'query_vars\', \'custom_query_vars_filter\' );

function prefix_issues_rewrite_rule() {
    add_rewrite_rule( \'issues/([^/]+)/([^/]+)\', \'index.php?ae_issues=$matches[1]&issueloc=$matches[2]\', \'top\' );
    add_rewrite_rule( \'issues/([^/]+)/([^/]+)/([^/]+)\', \'index.php?ae_issues=$matches[1]&issueloc=$matches[2]&issuearea=$matches[3]\', \'top\' );
}

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

function prefix_url_rewrite_templates() {

    if ( get_query_var( \'issueloc\' ) ) {
        add_filter( \'template_include\', function() {
            return get_template_directory() . \'/taxonomy-ae_issues.php\';
        });
    }
当我加载这样的页面时mysiteaddress/issues/issueloc/issuearea, 它将正确加载我想要的模板,我将能够query_var 对于issueloc. 但是query_var 对于issuearea 页上没有。

如果(另一方面)我加载如下页面mysiteaddress/issues/issueloc/?issuearea=something, 它会认出我的issuearea query_var (除其他外)。

这里有我遗漏的东西吗?为什么最后一个query_var 加载重写的URL(哪个加载正确的模板)?我的第二条重写规则有问题吗?

1 个回复
最合适的回答,由SO网友:jgraup 整理而成

[] =[] .= 附加到数组。

function custom_query_vars_filter($vars) {
  $vars[] = \'ae_issues\';
  $vars[] = \'issueloc\';
  $vars[] = \'issuearea\';
  return $vars;
}
另一个技巧是,如果不想弄乱查询,可以将这些变量更改为_issueloc &;_issuearea. 我发现将自定义查询作为标志对于模板重定向来说很好,但不必处理主查询(除非您需要)。

工作时,可以使用add_rewrite_tag().

add_action( \'init\', function() {
    add_rewrite_tag( \'%ae_issues%\', \'([^/]+)\' );
    add_rewrite_tag( \'%issueloc%\', \'([^/]+)\' );
    add_rewrite_tag( \'%issuearea%\', \'([^/]+)\' );

    add_rewrite_rule( \'^issues/([^/]+)/([^/]+)/([^/]*)\', \'index.php?ae_issues=$matches[1]&issueloc=$matches[2]&issuearea=$matches[3]\', \'top\' );
    add_rewrite_rule( \'^issues/([^/]+)/([^/]+)\', \'index.php?ae_issues=$matches[1]&issueloc=$matches[2]\', \'top\' );
} );

add_filter(\'template_include\', function($template){

    global $wp_query;
    if( isset($wp_query->query_vars[\'ae_issues\'])) {
        echo "<pre>";
        print_r($wp_query->query_vars);
        wp_die();
    }
    return $template;

});

相关推荐