web-dev-qa-db-fra.com

Impossible d'obtenir l'ID de publication dans functions.php?

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');
2
shuvroMithun

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.

5
gmazzap