This is the code I am trying to get working:
首先,让我们回顾一下代码中的错误:
本部分:$signup_redirect = wp_redirect( home_url(\'/thank-you-for-signing-up/\') );, 应该是$signup_redirect = home_url(\'/thank-you-for-signing-up/\'); 因为不然wp_redirect() 将用户重定向到您的;“谢谢你”;页面,无论评论是从何处提交的。
但你真的不应该打电话wp_redirect() 在过滤器钩子中(应该总是像使用短代码一样返回某些内容)。如果要重定向,请在挂钩中执行。
这部分:if ( is_page( \'sign-up\' ) ), 这永远不会是真的,因为你在使用comment_form() 它(默认情况下)将表单提交给/wp-comments-post.php 激发了comment_post_redirect hook.
所以在那一页上,is_page() 永远都是false.
现在,关于重定向到您的自定义;“谢谢你”;页面成功提交评论后,您可以尝试以下使用wp_get_referer() 获取引用URL及其路径是否/sign-up/ 如中所示https://example.com/sign-up/, 然后修改重定向URL:
function sign_up_redirect( $location ) {
$referer = wp_get_referer();
// The referer might be a relative path, so check that before calling parse_url().
$ref_url_path = ( \'/sign-up/\' === $referer ) ? $referer :
parse_url( $referer, PHP_URL_PATH );
// If it\'s the sign-up page, modify the redirect URL. Else, return it unmodified.
return ( \'/sign-up/\' === $ref_url_path ) ?
home_url( \'/thank-you-for-signing-up/\' ) : $location;
}
为了提高逻辑的可靠性,您应该在注释表单中添加一个referer隐藏字段,您可以通过
comment_form hook, like so:(参见
wp_referer_field() 有关函数的更多详细信息)
add_action( \'comment_form\', \'sign_up_comment_form\' );
function sign_up_comment_form() {
if ( is_page( \'sign-up\' ) ) {
wp_referer_field();
}
}
/* Or to add it to all comment forms:
add_action( \'comment_form\', \'wp_referer_field\' );
*/
PS:将代码添加到主题的
functions.php 文件
因此,我希望这会有所帮助,只需查看我的答案的最新版本,就可以尝试其他可能的选项:)