我试图重写的url如下所示。
root_domain/something/something-else/also-different-1030/?success=1289
使用这个重写规则,我试图捕获url并将其定向到ID为1289的帖子。
function my_success_rewrite_rule() {
add_rewrite_rule( \'.+success=([0-9]+)$\', \'index.php?p=$matches[1]\', \'top\' );
}
add_action( \'init\', \'my_success_rewrite_rule\' );
这是我为url测试的正则表达式
https://regex101.com/r/nUENTl/1/在正则表达式中,您可以看到组1捕获post ID
或$matches[1]
. 当我移除?
从url,它可以完美地工作并重定向任何urlsuccess=1289
在帖子的末尾ID
1289
然而,当我包括?
尽管在regex中通过指定.
对于任何字符和+
作为任意数量的事件的量化因子,然后success
在捕获组之前的正则表达式的开头( )
后跟a$
标记url字符串的结尾。
要保持?
在url中,仍然重写url以显示帖子1289
在这种情况下?我不知道如何逃跑或照顾?
. 使用.+\\?success
, 所以逃离?
不起作用。
我也在使用Monkeyman Rewrite Analyzer 它告诉我重写规则被正确捕获了。
我也在使用
flush_rewrite_rules( true );
在函数中。每次保存时,我都会刷新php文件中的规则,这样可以避免手动更新仪表板中的permalinks设置页面。
此外,我没有添加重写标记,因为p
是一个公共查询变量,因此无需将其添加到WP中,因为我想通过ID获取帖子,所以我需要使用p=$matches[1]
(我想,如果这是错误的想法,请纠正我,谢谢)。
编辑以更好地解释为什么我认为我需要?
在url中是这样的。url是用户单击验证链接时重定向到的url。我当然也可以省略?
从用户被重定向到的url,但我不确定这样做是否正确或正确。
if ( $verify === $verification ) {
update_post_meta( $form_id, \'verification_id\', \'verified\', $verify );
wp_safe_redirect( $url . \'?success=\' . $form_id );
}
因此,当验证代码正常时,我更新post-meta,然后获取用户在进行验证时使用的原始url,并添加
?success=$form_id
. 我认为WP可以处理这个问题,我也可以使用
$_GET[\'success\']
我必须有
?
在url中。
例如,稍后我这样做是为了从我想要的帖子中输出信息。
function catch_success() {
var_export( $_GET );
if ( isset( $_GET[\'success\'] ) ) {
$post_id = $_GET[\'success\'];
$post = get_post( $post_id );
var_export( $post );
$user_reserved_seats = get_post_meta( $post_id, \'user_reserved_seats\', true );
var_export( $user_reserved_seats );
}
}
add_action( \'template_redirect\', \'catch_success\' );
最初我想,能够使用
catch_success
功能我需要一个
?
在url中。
但与其做所有这些,我应该忽略?
并在验证链接签出后立即重定向到我想要的帖子?
因为现在我想我有2个重定向,1个来自验证链接,然后从那里到成功链接,2个来自成功链接到相关帖子,1289。我应该直接从验证链接重定向到有问题的帖子,是吗?或者我可以省略?
还有/success=1289
使用重写规则重定向链接到1289后?
有点历史,我最近问过这个问题with this 从某种意义上说,这是一个后续行动或下一步。