¿No puedes obtener el ID del post en functions.php?

6 feb 2015, 08:04:02
Vistas: 14.7K
Votos: 5

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');
8
Comentarios

¿Cuál es tu función? Edita tu pregunta y publica el código de la función.

Robert hue Robert hue
6 feb 2015 08:07:51

si la función es: function example(){ global $post; return $id=$post->ID; } y se usa en single.php, o page.php en general debería devolver el id de ese post/página, y para verlo en acción debes hacer echo allí echo example();

Mayeenul Islam Mayeenul Islam
6 feb 2015 08:10:15

@Roberthue He editado mi pregunta

shuvroMithun shuvroMithun
6 feb 2015 08:18:59

@MayeenulIslam en realidad no necesito imprimir nada, solo necesito actualizar el valor meta al enviar un formulario o cuando se haga clic en un enlace específico.

shuvroMithun shuvroMithun
6 feb 2015 08:20:25

@user1750063 Lo sé. Solo quise decir que puedes probarlo.

Mayeenul Islam Mayeenul Islam
6 feb 2015 08:23:36

El hook init se ejecuta antes de que se establezca el ID de la publicación, por lo que siempre devolverá falso, nulo o 0

Pieter Goosen Pieter Goosen
6 feb 2015 08:25:37

Entonces, ¿cómo puedo obtener el ID del post en esa función? @PieterGoosen

shuvroMithun shuvroMithun
6 feb 2015 08:27:16

Echa un vistazo a esta publicación

Pieter Goosen Pieter Goosen
6 feb 2015 08:31:53
Mostrar los 3 comentarios restantes
Todas las respuestas a la pregunta 1
0
10

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.

6 feb 2015 12:58:31