有许多不同的方法可以实现这一点,有些方法比其他方法更精巧,几乎所有的方法都有可能与其他插件发生冲突,但忽略所有这些,这里有一种方法非常接近您的要求。:)
此解决方案将支持如下URL格式:%comment_id%
是来自wp_comments
表格:
http://example.com/comments/%comment_id%/
首先,您需要使用以下代码配置URL重写。希望这是合理的自我嘲讽,但请毫不犹豫地问:
$wp->add_query_var(\'comment_id\'); // Add the "behind-the-scenes" query variable that WordPress will use
$wp_rewrite->add_rewrite_tag(\'%comment_id%\', \'([0-9]+)\',\'comment_id=\'); // Define a rewrite tag to match that assigns to the query var
$wp_rewrite->add_permastruct(\'comment-page\', \'comments/%comment_id%\'); // Define a URL pattern to match the rewrite tag.
您还需要在插件激活挂钩中调用此代码来刷新规则,或者如果是您的站点,您可以在管理控制台的设置区域保存永久链接:
global $wp_rewrite;
$wp_rewrite->flush_rules(false);
下一步添加a
parse_query
过滤器挂钩。这将在WordPress检查查询后调用。它测试您的
comment_id
query\\u var set,如果是,则测试您是否在所需的URL上。如果是,则使用
get_comment()
为了设定
\'p\'
与评论相关的帖子的参数(应设置为帖子ID)。这样,当WordPress运行它将要运行的查询时,不管发生什么,它都会加载您在
comment.php
主题模板文件,以后需要时无需再运行另一个查询。这段代码还告诉WordPress使用命名奇怪的
caller_get_posts
选项:
add_filter( \'parse_query\', \'my_parse_query\' );
function my_parse_query( $query ) {
global $wp;
if (isset($query->query[\'comment_id\']) && substr($wp->request,0,9)==\'comments/\') {
$comment = get_comment($query->query[\'comment_id\']);
$query->query_vars[\'p\'] = $comment->comment_post_ID; // Causes the comment\'s post to be loaded by the query.
$query->query_vars[\'caller_get_posts\'] = true; // Keeps sticky posts from invading into the top of our query.
}
}
接下来,您需要将代码挂接进来
/wp-includes/template-loader.php
使用
template_include
滤器WordPress检查查询并加载评论帖子后,将调用此函数。在这里,您将首先再次检查
comment_id
在query_var中,以及您想要的URL。如果是,我们将更换
/index.php
模板页面与
/comment.php
这是您需要创建的主题模板文件:
add_filter( \'template_include\', \'my_template_include\' );
function my_template_include( $template ) {
global $wp,$wp_query;
if (isset($wp_query->query[\'comment_id\']) && substr($wp->request,0,9)==\'comments/\') {
$template = str_replace(\'/index.php\',\'/comment.php\',$template);
}
return $template;
}
最后,现在您需要创建我选择调用的主题模板文件
/comment.php
. 因为这是你的主题,你会想让它看起来像你想要的,但这里有一个例子让你开始:
<?php
/*
* File: /wp-content/themes/my-theme/comment.php
*/
global $wp_query,$post;
$comment_id = $wp_query->query[\'comment_id\'];
$comment = get_comment($comment_id);
$permalink = get_permalink($post->ID);
get_header();
?>
<div id="container">
<div id="comment-<?php echo $comment_id; ?>" class="comment">
<p>Comment by: <span class="comment-author">
<a href="<?php echo $comment->comment_author_url; ?>"><?php echo $comment->comment_author; ?></a></span>
on <span class="comment-date"><?php echo date("D M jS Y", strtotime($comment->comment_date)); ?></span>
at <span class="comment-time"><?php echo date("h:ia", strtotime($comment->comment_date)); ?></span>
</p>
<p>About: <a href="<?php echo $permalink; ?>"><?php echo $post->post_title; ?></a></p>
<blockquote><?php echo $comment->comment_content; ?></blockquote>
</div>
</div>
<?php
get_sidebar();
get_footer();
有什么问题吗?问问吧。
P、 我上面描述的所有代码都可以放在你的主题中functions.php
文件和/或您自己的插件。对于URL重写刷新规则有一个警告,如果你打算在管理控制台的permalinks部分手动刷新它们,那么它应该放在插件激活挂钩中。我没有展示如何注册激活钩子,但是如果你想了解更多,你可以阅读here.