¿Cómo obtener el ID del post actual de un tipo de post personalizado en un bucle usando template single-{custom type}.php?

22 nov 2013, 15:59:14
Vistas: 42.2K
Votos: 2

Tengo una plantilla de tipo de post personalizado donde estoy haciendo un bucle a través de todos los posts. Lo que intento es que cuando vaya a mi página de post personalizado quiero obtener el ID del post actual en el bucle.

Así que intenté verificar si el enlace permanente es el mismo para el post dentro del bucle, si es el mismo obtendré el ID del post actual en el bucle.

Aquí está el código que probé

Primero intentando obtener el enlace permanente fuera para verificarlo dentro del bucle

$permalink = get_permalink();

Ahora que tengo el enlace permanente del post actual quiero obtener el ID del post actual

if($query->have_posts()) : 
    while ($query->have_posts()) : $query->the_post();
        if(the_permalink()==$permalink){
            echo get_the_ID();
        }else{
            echo "no encontrado";
        }
    endwhile;
    wp_reset_postdata();
endif;

Probé estas cosas en single-{custom-post-name}.php y estoy obteniendo no encontrado. ¿Alguien puede darme una forma de obtener el ID del post actual en esta plantilla?

2
Comentarios

Como estás usando get_permalink() fuera del bucle, podrías necesitar pasar el ID de la entrada. De lo contrario, devuelve false y más adelante, cuando ejecutes el bucle, automáticamente te dará "no encontrado".

sri sri
22 nov 2013 16:09:16

También, explicar el motivo principal por el que estás haciendo esto podría conseguirte más respuestas y posiblemente mejores.

sri sri
22 nov 2013 16:10:42
Todas las respuestas a la pregunta 1
1

Entonces tienes dos bucles: el bucle principal y el segundo usando $query.

Quieres comparar si en algún punto de tu segundo bucle hay una coincidencia entre el post actual (dentro del bucle) y el post procesado dentro del bucle $query.

¿Estoy en lo correcto?

En lugar de verificar los enlaces permanentes, te propondría verificar los IDs.

Así que en el primer bucle creas una variable con el ID del post actual:

$current_post_id = $post->ID;

y en tu segundo bucle simplemente comparas:

if($query->have_posts()) : while ($query->have_posts()) : $query->the_post();

    if( $current_post_id === $post->ID ) {
         echo $post->ID; 
    } else {
        echo "no encontrado";
    }

endwhile; wp_reset_postdata(); endif;

No estoy seguro si es exactamente lo que buscas, háznoslo saber.

PD: Debería agregar que uses un nombre más específico para tu query, solo para evitar colisiones de nombres con algún plugin o cualquier cosa, como $my_prefix_query

22 nov 2013 16:37:41
Comentarios

Tienes razón, estaba buscando lo mismo. Anteriormente no sabía cómo usar el bucle por defecto have post. Pensé que obtendría todas las publicaciones. Pero cuando lo intenté, me di cuenta de que obtendría la publicación actual. Así que usé get_the_id() y lo asigné a una variable, luego lo usé en el bucle de consulta. Gracias @Simon

sun sun
23 nov 2013 14:53:34