WP笔记

如何在用户提交评论后将用户定向到自定义地址

WordPress的评论提交过程由根目录下的wp-comments-post.php控制,要想对评论提交过程做点啥,就要研究这个文件。比如,今天要介绍的在用户提交评论后将用户定向到自定义地址,就要读一读wp-comments-post.php。

如何找要用哪个钩子函数

WordPress有数百个可以使用的钩子函数,有时候我们会迷惑到底如何知道该用哪个,那么多不可能一一记住。最好的方式就是读源代码,WordPress文件命名都是很有意义的,从名字就可以大体判断文件的功能。并且,通过查看表单的提交地址,我们也能猜出某个功能是在哪个文件中完成的。

例如提交评论表单,用firebug看一下action地址

<form id="commentform" method="post" action="https://www.solagirl.net/wp-comments-post.php">

原来评论表单要提交到个目录下的wp-comments-post.php中,打开这个文件,大略看一下,能发现两个我们需要的东西。

$location = empty($_POST['redirect_to']) ? get_comment_link($comment_id) : $_POST['redirect_to'] . '#comment-' . $comment_id;
$location = apply_filters('comment_post_redirect', $location, $comment);

如何自定义评论提交后的重定向地址

这两个$location就是控制评论表单提交后跳转到哪里的关键,挑选任意一个都可以实现我们的要求。

例如,先用比较直观的第二句代码,通过filters改变跳转地址,例如发表评论后定向到一个thank you页面,在functions.php中写如下代码:

add_filter('comment_post_redirect', 'redirect_comment');
function redirect_comment() {
	return home_url('/thankyou/');
}

用户会被定向到https://www.solagirl.net/thankyou/,获取这个地址的方式很多,可以用home_url(),或者get_permalink()等。

还可以进一步获取referer,显示thankyou页面几秒钟后将用户再次重定向到提交评论的地址。

如果用第一句代码来实现,只需要在评论表单中加一个隐藏域,名称为redirect_to,值就是要重定向的地址。

<input type='hidden' name='redirect_to', value='<?php echo home_url('/thankyou/');?>' />

The End

2条评论

  1. 博主写了很多wp技术的文章啊!看来对wp有很深的研究啊!学习了!我的博客写文章的时候在编辑器里加代码跟百度分享的插件有冲突造成乱码,博主的代码高亮是用的那个插件呀!

评论已关闭。