¿No puedes obtener el ID del post en functions.php?
Necesito el ID del post actual en una función que he escrito en functions.php. Pero no puedo obtener el ID. He probado varios métodos.
Como:
get_the_ID(); //devuelve false
global $post;
$id = $post->ID; //devuelve null
global $wp_query
$id =$wp_query->get_queried_object_id(); //devuelve 0
$url = 'http://'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$id = url_to_postid($url); //devuelve 0
Estoy usando la última versión de WordPress. ¿Qué puedo hacer ahora?
ACTUALIZACIÓN: Necesito el ID del post en la siguiente función.
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');
El ID del post está disponible después de que se ejecuta la consulta.
El primer hook donde es seguro obtener el ID del post es 'template_redirect'
.
Si puedes modificar tu función para que acepte un ID de post como argumento, así:
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);
}
}
Puedes hacer:
add_action('template_redirect', function() {
if (is_single()){
em_change_form(get_queried_object_id());
}
});
He usado get_queried_object_id()
para obtener el ID del post actual en la consulta.
Si absolutamente necesitas llamar a tu función en un hook temprano como 'init'
, puedes usar url_to_postid()
, y home_url()
+ add_query_arg()
para obtener la URL actual:
add_action('init', function() {
$url = home_url(add_query_arg(array()));
$id = url_to_postid($url);
if ($id) {
em_change_form($id);
}
});
Nota que el segundo método es menos performante porque url_to_postid()
fuerza a WordPress a analizar las reglas de reescritura, así que si puedes, usa el primer método.
