触发查询后,post ID可用。
可以安全获取post id的第一个钩子是\'template_redirect\'
.
如果可以修改函数以接受post id作为参数,如下所示:
function em_change_form($id){
$reg_type = filter_input(INPUT_GET, \'reg_typ\', FILTER_SANITIZE_STRING);
if($reg_type === \'vln\'){
update_post_meta($id,\'custom_booking_form\', 2);
} elseif ($reg_type == \'rsvp\') {
update_post_meta($id,\'custom_booking_form\', 1);
}
}
您可以执行以下操作:
add_action(\'template_redirect\', function() {
if (is_single())
em_change_form(get_queried_object_id());
}
});
我用过
get_queried_object_id()
获取当前查询的帖子id。
如果您确实需要在早期钩子上调用函数,如\'init\'
, 您可以使用url_to_postid()
, 和home_url()
+ add_query_arg()
要获取当前url,请执行以下操作:
add_action(\'init\', function() {
$url = home_url(add_query_arg(array()));
$id = url_to_postid($url);
if ($id) {
em_change_form($id);
}
});
请注意,第二种方法性能较差,因为
url_to_postid()
强制WordPress解析重写规则,因此如果可以,请使用第一种方法。