Не получается получить ID записи в functions.php?
Мне нужно получить ID текущей записи в функции, которую я написал в functions.php. Но я не могу получить ID. Я пробовал несколько методов.
Например:
get_the_ID(); //возвращает false
global $post;
$id = $post->ID; //возвращает null
global $wp_query
$id =$wp_query->get_queried_object_id(); //возвращает 0
$url = 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //возвращает 0
Я использую последнюю версию WordPress. Что мне теперь делать?
ОБНОВЛЕНИЕ: Мне нужен ID записи в функции ниже.
function em_change_form(){
$id = get_the_ID();
if(isset($_GET['reg_typ'])) {
$reg_type = $_GET['reg_typ'];
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('init','em_change_form');
ID записи становится доступен после выполнения запроса.
Первый безопасный хуков для получения ID записи — это 'template_redirect'
.
Если вы можете модифицировать вашу функцию, чтобы она принимала 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 парсить правила перезаписи, поэтому, если возможно, используйте первый метод.
