J'ai besoin de l'ID de poste actuel dans une fonction, que j'ai écrite dans functions.php. Mais je ne peux pas obtenir l'identifiant. J'ai essayé plusieurs méthodes.
Comme
get_the_ID(); //returns false
global $post;
$id = $post->ID; //returns null
global $wp_query
$id =$wp_query->get_queried_object_id(); //returns 0
$url = 'http://'.$_SERVER["HTTP_Host"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //returns 0
J'utilise la dernière version de wordpress. Que puis-je faire maintenant?
UPDATE: J'ai besoin de l'identifiant de post dans la fonction ci-dessous.
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');
L'identifiant de publication est disponible après le lancement de la requête.
Le premier point d’accès sûr pour obtenir l’identifiant de publication est 'template_redirect'
.
Si vous pouvez modifier votre fonction pour accepter un post id en tant qu'argument, procédez comme suit:
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);
}
}
Tu peux faire:
add_action('template_redirect', function() {
if (is_single())
em_change_form(get_queried_object_id());
}
});
J'ai utilisé get_queried_object_id()
pour obtenir le post-id demandé.
Si vous devez absolument appeler votre fonction avec un point d'ancrage tel que 'init'
, vous pouvez utiliser url_to_postid()
, et home_url()
+ add_query_arg()
pour obtenir l'URL actuelle:
add_action('init', function() {
$url = home_url(add_query_arg(array()));
$id = url_to_postid($url);
if ($id) {
em_change_form($id);
}
});
Notez que la seconde méthode est moins performante car url_to_postid()
oblige WordPress à analyser les règles de réécriture. Si vous le pouvez, utilisez la première méthode.