我有一个查询变量show=othertemplate
我可以将其添加到任何URL中,以不同的模板在Wordpress中显示任何帖子、页面或存档,如下所示:mysite.com/[any URL]/?show=othertemplate. 我希望它可以通过干净的URL访问,比如[any URL]/othertemplate 或[any URL]/show/othertemplate.
我尝试通过向query\\u vars过滤器注册query var并向中添加如下代码来实现这一点。htaccess,但Wordpress介入并抛出了404。WP调试栏显示查询正在查找附件=打印。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !^/index\\.php
RewriteRule ^(.*)/othertemplate/?$ /index.php/$1?view=othertemplate [L]
我也尝试过使用Wordpress重写函数,但同样的情况也发生了。
function st_myqueryvars($vars) {
$vars[] = \'show\';
return $vars;
}
add_filter(\'query_vars\', \'st_myqueryvars\');
function st_myrewriterules( $wp_rewrite ) {
$newrules = array();
$new_rules[\'^(.*)/othertemplate/?$\'] = \'index.php/$matches[1]?show=othertemplate\';
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_filter(\'generate_rewrite_rules\',\'st_myrewriterules\');
这里有我遗漏的东西吗?
Update: 刷新permalinks后,我看到此WP函数重写了/[any URL]/template 到index.php?show=template 而不是index.php?[the URL\'s corresponding query string]&show=template. 我不能“硬编码”像post\\u type=$匹配项这样的查询字符串(1)(&;名称=$匹配项[2]。。。因为它需要对任何具有不同永久链接结构的页面/帖子/归档文件起作用。我该怎么解决这个问题?
SO网友:MathSmath
您应该看看“重写端点”,这比自定义重写要简单得多。它们非常适合您的用例:http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint
您可以这样添加“显示”端点:
function wpsx_37961_add_endpoints() {
// Add the "show" rewrite endpoint to all URLs
add_rewrite_endpoint(\'show\', EP_ALL);
}
add_action(\'init\',\'wpsx_37961_add_endpoints\');
然后,您可以在WP操作上检查其值(或者更早,我不确定),例如:
function wpsx_37961_check_endpoint() {
$show = $wp_query->get( \'show\' );
// Now, do whatever template switching you want based on the $show var\'s value
}
add_action(\'wp\',\'wpsx_37961_check_endpoint\');
实际切换模板的工作由您决定,但这将使您的端点就位。没有过滤查询变量,没有将重写规则拼凑在一起,没有困难:)