Establecer manualmente las variables globales $post con un ID para usar etiquetas de plantilla

10 oct 2011, 15:19:57
Vistas: 36.3K
Votos: 27

Tengo una función que recupera IDs de entradas por medios muy específicos.

Necesito poder establecer el global $post para usar funciones como the_content(), que no permite un ID como parámetro.

¿Cómo puedo lograr esto?

1
Comentarios

¿Qué quieres decir exactamente con "establecer el global $post"? ¿Podrías por favor a) publicar la función que recupera los IDs e ilustrar/bosquejar tu caso de uso?

kaiser kaiser
10 oct 2011 16:21:28
Todas las respuestas a la pregunta 4
0
44

Cuando estés en tu bucle, añade esto:

global $post; 
$post = get_post( $ID, OBJECT );
setup_postdata( $post );

//Haz algo

wp_reset_postdata();
28 may 2012 09:36:02
0

Para trabajar con publicaciones fuera del bucle intenta usar:

get_post(post_id)

para obtener una publicación con un ID específico fuera del bucle. Cuando haces esto, el objeto global $post contendrá la publicación que acabas de seleccionar. Ahora puedes obtener el contenido usando:

$post->post_content.

Consulta la documentación de get_post en el Codex de WordPress

11 oct 2011 06:58:35
0

Puedes usar una sola línea para restablecer el objeto global post.

setup_postdata( $GLOBALS['post'] =& $custom_post_object );

Cuando termines tu plantilla o bucle, asegúrate de restablecer el post global para no afectar otras plantillas más adelante en la pila.

wp_reset_postdata();

Nota: PHPCS con los estándares de WordPress mostrará un aviso al sobrescribir el post global, por lo que si estás usando los estándares de WordPress, necesitarás deshabilitarlo para esa línea de la siguiente manera:

setup_postdata( $GLOBALS['post'] =& $post ); //phpcs:ignore
29 jul 2021 19:59:03
0

Una solución que funciona para mí es:

  1. global $post; antes del bucle
  2. setup_postdata($post); dentro del bucle
  3. wp_reset_postdata(); después del bucle

Tenga en cuenta que el nombre de la variable debe ser $post

9 oct 2021 21:52:06