使用固定链接和ADD_REWRITE_RULE为注释分页

时间:2011-03-24 作者:OleVik

我已经做了几天了,这里有很多答案和使用指南。htaccess、在Wordpress中使用add\\u rewrite\\u rule()的指南以及整个web的示例。我不确定我的正则表达式中是否存在检测正确URL的故障,或者我想要完成的内容与可以完成的内容之间是否存在脱节。

基本上,我试图通过强制将评论与帖子(或者更好的是,评论与内容)分离到与内容“关联”的单独页面。例如,http://localhost/wp/2011/02/25/hello-world-2/ 是一篇文章,该文章的评论应出现在http://localhost/wp/2011/02/25/hello-world-2/comments/. 现在,a"little bird" 曾经说过,这可以通过以下方式实现:

RewriteRule ^archives/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comments/?$ /index.php?year=$1&monthnum=$2&day=$3&name=$4&comments=1 [QSA,L] (鉴于我不需要在/归档文件中工作,为了让我的上述示例工作,我删除了它),我将其转换为以下插件:

<?php
/*
Plugin Name: Gingah Permalink Rewrite
Plugin URI: http://gingahmail.com/wordpress/
Description: Useful Permalink-structures, that required a plugin to work.
Version: 1.0
Author: Gingah
Author URI: http://gingahmail.com/
*/

register_activation_hook( __FILE__, \'gingah_rewrite_activate\' );
function gingah_rewrite_activate() {
    gingah_rewrite();
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, \'gingah_rewrite_deactivate\' );
function gingah_rewrite_deactivate() {
    flush_rewrite_rules();
}
add_action(\'admin_init\', \'gingah_rewrite\');
function gingah_rewrite() {
    add_rewrite_rule( \'^([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comments/?$\', \'/index.php?year=$1&monthnum=$2&day=$3&name=$4&comments=1 [QSA,L]\', \'top\' );
}
?>
(基于网络上无数的例子)

然而,这并不起作用。尽管如此http://localhost/wp/2011/02/25/hello-world-2/?comments=1 确实产生了预期的结果。那么这里出了什么问题?

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

默认情况下,WordPress重写规则不再存储在Apache配置中,而是由WordPress本身处理。5年前编写该论坛主题时,情况可能并非如此,但目前只有“外部”规则最终出现在Apache配置中,所有其他规则都存储在数据库中,由the WP::parse_request() function.

这意味着您应该在add_rewrite_rule() 呼叫以下代码看起来更好:

add_rewrite_rule(
    // The beginning `^` is added by WordPress
    \'([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/([^/]+)/comments/?$\',
    // `$1` should be replaced with `$matches[1]`
    \'index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&name=$matches[4]&comments=1\',
    \'top\'
);
当我用my Rewrite analyzer plugin, 我注意到了comments 不是标准查询变量,因此请记住,您也必须处理它。

结束

相关推荐

更改Get_Comments_link()和Get_Comments_Pagenum_link()函数生成的注释链接

当前我的主题需要get_comments_link() 创建标准定位的步骤#comments 链接到帖子下方的评论,以及get_comments_pagenum_link() 对分页注释执行函数。我想更换#comments 使用任何其他字符串锚定这些函数,当然不会更改WP的核心php文件。一个简单的add_filter 完全替换核心函数(pluggable.php中的除外)似乎是不可能的。有没有其他方法可以实现对使用PHP(而不是Java)的核心函数的输出的这一微小更改?这里有没有办法使用add_filt