好问题!WordPress将您的注释页号分配给查询var 'cpage'
,当您的URL /comment-page-1/
末尾有该查询时将进行设置。因此,您的罪魁祸首是该redirect_canonical()
函数的第192行/wp-includes/canoncial.php
。
if ( get_query_var('paged') || is_feed() || get_query_var('cpage') ) {
由于将redirect_canonical()
函数设置为操作,因此我们可以做的是插入要调用的函数,将函数'cpage'
var 设置为false
,调用redirect_canonical()
,然后再设置'cpage'
为原来的值。这将使WordPress无法重定向到您。
要插入自己的函数,您需要调用两个钩子'init'
,'template_redirect'
就像这样,确保将'init'
钩子设置为在do_action()
添加了redirect_canonical()
以下内容的内部WordPress核心之后调用:
add_action('init','yoursite_init',11); //11=lower priority
function yoursite_init() {
remove_action('template_redirect','redirect_canonical');
add_action('template_redirect','yoursite_redirect_canonical');
}
add_action('template_redirect','yoursite_redirect_canonical');
function yoursite_redirect_canonical($requested_url=null, $do_redirect=true) {
$cpage = get_query_var('cpage');
set_query_var('cpage',false);
redirect_canonical($requested_url, $do_redirect);
set_query_var('cpage',$cpage);
}
然后,当然,您需要对自己的计算机做一些事情'cpage'
。您可以检查返回的值,get_query_var('cpage')
也可以添加另一个挂钩,以允许您创建我所做的特定于注释的模板。这将增加查找具有相同主题的模板文件,因为它会正常加载,但与[comments].php
这个名字,而不是结束.php
,即single[comments].php
。请注意,我将此过滤器的优先级设置为11;如果您使用的插件在钩子之后添加自身,则可能需要设置更大的数字:
add_filter('single_template','yoursite_single_template',11);
function yoursite_single_template($template) {
if (get_query_var('cpage'))
$template = str_replace('.php','[comments].php',$template);
return $template;
}
这是所有工作的证明!
(来源:mikeschinkel.com)