setup_postdata() non sembra funzionare?
Non sono sicuro del perché ma ho usato get_posts()
per interrogare alcuni dati. Poi ho usato setup_postdata()
... Penso sia utilizzato per poter usare funzioni come the_permalink()
ecc. con i nuovi dati 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() ?>">Leggi di più ...</a></p>
<?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>
<?php endforeach; ?>
ma sembra che solo the_excerpt
contenga il nuovo valore dei dati del post, perché? Ho scoperto che se uso echo get_the_permalink($cp)
funziona correttamente. Ma penso che la versione più breve sarebbe migliore

Potrei sbagliarmi, ma da quello che vedo, "setup_postdata()" dovrebbe essere utilizzato quando si esegue una query select personalizzata (non solo query_posts): http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query
Inoltre, se vuoi utilizzare tag come "the_title()" e "the_permalink()" con quella query select personalizzata... dovrai utilizzare specificamente il nome della variabile $post (non un altro nome di variabile) in setup_postdata() - E ANCHE - dovresti chiamare global $post prima del tuo ciclo "foreach"...
Quindi fondamentalmente segui quell'esempio nel link del codex. E non cambiare il nome della variabile $post - altrimenti si rompe.
Spero sia utile

Qualcuno offra una birra a quest'uomo! Grazie... Hai idea del perché/percome una variabile locale possa interferire con setup_postdata()
?

Strano. Sembra così illogico richiedere un nome specifico per la variabile quando la stai passando come parametro.

@Gavin Non capisco perché più persone non mettano in discussione quanto sia strana alcune logiche di WP. La stranezza ormai sembra essere la normalità...

global post;
non funziona con setup_postdata($post);
se vuoi utilizzare i comandi della famiglia the_title()
ecc.
È documentato in https://codex.wordpress.org/Function_Reference/setup_postdata
Invece utilizza
// global $post; setup_postdata($post_object); //non fare così!
setup_postdata( $GLOBALS['post'] =& $post_object );
...assicurati anche che il tuo $post_object
sia un oggetto WP_Post valido.

2 cose importanti per far funzionare questo codice:
Usa la variabile globale
$post
per impostare i dati del post, altrimenti le funzioni del loop non vedranno il tuo oggetto post personalizzato.MOLTO IMPORTANTE: assicurati di chiamare la funzione
wp_reset_postdata()
alla fine del loop, altrimenti potresti avere strani errori che saranno molto difficili da debuggare.<?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; ?>

Quando si effettua una query sui post, utilizza il normale loop con un insieme di argomenti passati. Poi resetta la query alla fine.
<?php
// fa sì che la query rispetti le regole di impaginazione
$paged = get_query_var('paged');
// definizione degli argomenti per il loop personalizzato
$variablenameQuery = array(
'post_type' => 'seating-charts',
'post_status' => 'publish',
'cust_tax_name' => 'custom-tax-term',
'posts_per_page' => -1, // -1 significa tutti i post
'orderby' => 'date',
'order' => 'ASC',
'paged' => $paged,
); // fine query
// passa il risultato in query_posts per ottenere il risultato
query_posts($variablenameQuery);
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php // Stile del singolo post ?>
<?php endwhile; ?>
<?php // navigazione impaginata - post successivo, post precedente... ?>
<?php else : ?>
<h3>Ops, sembra ci sia stato un problema. Per favore <a href="<?php echo get_option('home'); ?>/contact" title="Contattaci">contattaci</a> e risolveremo il problema.</h3>
<?php endif; ?>
<!-- resetta la Query di WordPress -->
<?php wp_reset_query(); ?>

Grazie, funziona. Ma solo per capire, sai perché setup_postdata()
non sembra funzionare? L'ho usato in modo sbagliato?

@jiewmeng - Prova a usare $post
invece di $cp
per vedere se risolve il problema.

Sono d'accordo con la soluzione proposta da @t31os. Gli esempi nel codex mostrano l'uso in quel modo e $post è una variabile speciale in WordPress, quindi potrebbe fare più cose all'interno di un loop rispetto a quella che hai usato.

@t31os, @curtismchale, sembra che non abbia funzionato neanche così. Ottengo ancora lo stesso risultato

Vecchio, lo so, ma NON usare query_posts() a meno che tu non SAPPIA di averne bisogno. È inefficiente. Guarda questa utile immagine per le alternative: https://www.rarst.net/images/query_functions.png
