setup_postdata() no parece estar funcionando
No estoy seguro por qué pero he usado get_posts()
para consultar algunos datos. Luego usé setup_postdata()
... Creo que se usa para poder utilizar funciones como the_permalink()
etc con los nuevos datos del post?
<?php foreach ($childPosts as $cp) : setup_postdata($cp); ?>
<article <?php post_class() ?> id="post-<?php the_ID(); ?>">
<h1><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h1>
<?php if (has_post_thumbnail()) : ?>
<a href="<?php the_permalink() ?>"><?php the_post_thumbnail(($hasOutputNotFeaturedDiv) ? 'thumb-small' : null) ?></a>
<?php endif; ?>
<?php the_excerpt(); ?>
<p class="more"><a href="<?php the_permalink() ?>">Leer más ...</a></p>
<?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>
<?php endforeach; ?>
pero parece que solo the_excerpt
contiene el nuevo valor de datos del post, ¿por qué es eso? Me doy cuenta de que si uso echo get_the_permalink($cp)
funciona bien. Pero creo que la versión más corta sería mejor

Puedo estar equivocado, pero por lo que veo, "setup_postdata()" debería usarse cuando se hace una consulta select personalizada (no solo query_posts): http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query
Además, si deseas usar etiquetas como "the_title()" y "the_permalink()" con esa consulta select personalizada ... necesitarás usar específicamente el nombre de variable $post (no otro nombre de variable) en setup_postdata() - TAMBIÉN - deberías llamar a global $post antes de tu bucle "foreach"...
Así que básicamente sigue ese ejemplo en el enlace del codex. Y no cambies el nombre de la variable $post - de lo contrario se romperá.
Espero que esto ayude

¡Alguien le compre una cerveza a este hombre! Gracias... ¿Alguna idea de por qué/cómo una variable local puede interferir con setup_postdata()
?

Extraño. Parece tan ilógico requerir un nombre de variable específico cuando lo estás pasando como parámetro.

@Gavin No sé por qué más personas no cuestionan lo extraña que es parte de la lógica de WP. Lo raro ahora parece ser lo normal...

global post;
no funciona con setup_postdata($post);
si deseas utilizar comandos de la familia the_title()
etc.
Está documentado en https://codex.wordpress.org/Function_Reference/setup_postdata
En su lugar, utiliza:
// global $post; setup_postdata($post_object); // ¡no hagas esto!
setup_postdata( $GLOBALS['post'] =& $post_object );
...también asegúrate de que tu $post_object
sea un objeto WP_Post válido.

2 aspectos importantes para que esto funcione,
usa la variable global $post para configurar los datos del post, de lo contrario las funciones del loop no verán tu objeto de post personalizado.
MUY IMPORTANTE: asegúrate de llamar a la función
wp_reset_postdata()
al final del loop, de lo contrario podrías tener errores extraños que serán muy difíciles de depurar.<?php global $post; $myposts = get_posts( array( 'posts_per_page' => 5, 'offset' => 1, 'category' => 1 ) ); if ( $myposts ) : foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> endforeach; wp_reset_postdata(); endif; ?>

Al consultar publicaciones, simplemente usa el bucle normal con un conjunto de argumentos pasados a él. Luego restablece la consulta al final.
<?php
// hace que la consulta respete las reglas de paginación
$paged = get_query_var('paged');
// definiendo los argumentos para el bucle personalizado
$variablenameQuery = array(
'post_type' => 'seating-charts',
'post_status' => 'publish',
'cust_tax_name' => 'custom-tax-term',
'posts_per_page' => -1, // -1 significa todas las publicaciones
'orderby' => 'date',
'order' => 'ASC',
'paged' => $paged,
); // fin de la consulta
// pasa el resultado a query_posts para obtener el resultado
query_posts($variablenameQuery);
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php // Estilo de publicación individual ?>
<?php endwhile; ?>
<?php // navegación paginada - siguiente publicación, publicación anterior... ?>
<?php else : ?>
<h3>¡Vaya! Parece que hubo un problema. Por favor <a href="<?php echo get_option('home'); ?>/contact" title="Contáctanos">ponte en contacto</a> con nosotros y solucionaremos el problema.</h3>
<?php endif; ?>
<!-- restablece la consulta de WordPress -->
<?php wp_reset_query(); ?>

Gracias, esto funciona. Pero solo para entender, ¿sabes por qué setup_postdata()
parece no funcionar? ¿Lo usé incorrectamente?

@jiewmeng - Prueba usando $post
en lugar de $cp
para ver si resuelve el problema.

Yo voto por la solución que sugiere @t31os. Los ejemplos en el codex muestran el uso de esa manera y $post es una variable especial en WordPress, por lo que podría hacer más dentro de un bucle que lo que has usado.

@t31os, @curtismchale, eso tampoco pareció funcionar. Sigue dando el mismo resultado

Antiguo, lo sé, pero NO uses query_posts() a menos que SEPAS que lo necesitas. Es ineficiente. Mira esta imagen útil con las alternativas: https://www.rarst.net/images/query_functions.png
