Nu pot obține ID-ul postării în functions.php?
Am nevoie de ID-ul postării curente într-o funcție scrisă în functions.php. Dar nu pot obține ID-ul. Am încercat mai multe metode.
De exemplu:
get_the_ID(); //returnează false
global $post;
$id = $post->ID; //returnează null
global $wp_query
$id =$wp_query->get_queried_object_id(); //returnează 0
$url = 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //returnează 0
Folosesc cea mai recentă versiune de WordPress. Ce pot face acum?
ACTUALIZARE: Am nevoie de ID-ul postării în funcția de mai jos.
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-ul postării este disponibil după ce interogarea a fost executată.
Primul hook în care este sigur să obții ID-ul postării este 'template_redirect'
.
Dacă poți modifica funcția ta să accepte un ID de postare ca argument, astfel:
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);
}
}
Poți face:
add_action('template_redirect', function() {
if (is_single()){
em_change_form(get_queried_object_id());
}
});
Am folosit get_queried_object_id()
pentru a obține ID-ul postării curente din interogare.
Dacă ai nevoie neapărat să apelezi funcția ta într-un hook timpuriu precum 'init'
, poți utiliza url_to_postid()
, și home_url()
+ add_query_arg()
pentru a obține URL-ul curent:
add_action('init', function() {
$url = home_url(add_query_arg(array()));
$id = url_to_postid($url);
if ($id) {
em_change_form($id);
}
});
Reține că a doua metodă este mai puțin performantă deoarece url_to_postid()
forțează WordPress să analizeze regulile de rescriere, așa că dacă poți, folosește prima metodă.
