setup_postdata() nu pare să funcționeze?
Nu sunt sigur de ce, dar am folosit get_posts()
pentru a interoga niște date. Apoi am folosit setup_postdata()
... Cred că este folosit pentru a putea utiliza funcții precum the_permalink()
etc. cu noile date ale postării?
<?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() ?>">Citește mai mult ...</a></p>
<?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>
<?php endforeach; ?>
dar se pare că doar the_excerpt
conține noua valoare a datelor postării, de ce? Am descoperit că dacă folosesc echo get_the_permalink($cp)
funcționează ok. Dar cred că versiunea mai scurtă ar fi mai bună

S-ar putea să greșesc, dar din ceea ce văd, "setup_postdata()" ar trebui folosit atunci când faci o interogare select personalizată (nu doar query_posts): http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query
De asemenea, dacă vrei să folosești tag-uri precum "the_title()" și "the_permalink()" cu acea interogare select personalizată... va trebui să folosești numele variabilei $post în mod specific (nu alt nume de variabilă) în setup_postdata() - ÎN PLUS - ar trebui să apelezi global $post înainte de bucla ta "foreach"...
Deci, practic, urmează exemplul din link-ul către Codex. Și nu schimba numele variabilei $post - altfel nu va funcționa.
Sper că te ajută

Cineva să-i cumpere acestui om o bere! Mulțumesc.. Ai vreo idee de ce/cum o variabilă locală poate interferează cu setup_postdata()
?

Ciudat. Pare atât de nelogic să fie necesar un nume specific de variabilă când o transmiți ca parametru.

@Gavin Nu știu de ce mai mulți oameni nu pun la îndoială cât de ciudată este uneori logica din WP. Ciudățenia pare să fie norma acum...

global post;
nu funcționează cu setup_postdata($post);
dacă dorești să utilizezi funcții precum the_title()
etc.
Mai multe detalii găsești în https://codex.wordpress.org/Function_Reference/setup_postdata
În schimb, folosește
// global $post; setup_postdata($post_object); //nu face asta!
setup_postdata( $GLOBALS['post'] =& $post_object );
...de asemenea, asigură-te că $post_object
este un obiect WP_Post valid.

2 lucruri importante pentru a face acest lucru să funcționeze,
utilizează variabila globală $post pentru a inițializa datele postului, altfel funcțiile buclă nu vor vedea obiectul tău personalizat de postare.
FOARTE IMPORTANT: asigură-te că apelezi funcția
wp_reset_postdata()
funcție la sfârșitul buclei, altfel poți avea erori ciudate care vor fi foarte greu de depanat.<?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; ?>

Când interogați postările, utilizați bucla normală cu un set de argumente transmise. Apoi resetați interogarea la final.
<?php
// face ca interogarea să respecte regulile de paginare
$paged = get_query_var('paged');
// definirea argumentelor pentru bucla personalizată
$variablenameQuery = array(
'post_type' => 'seating-charts',
'post_status' => 'publish',
'cust_tax_name' => 'custom-tax-term',
'posts_per_page' => -1, // -1 înseamnă toate postările
'orderby' => 'date',
'order' => 'ASC',
'paged' => $paged,
); // sfârșitul interogării
// transmite rezultatul în query_posts pentru a obține rezultatul
query_posts($variablenameQuery);
?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php // Stilizarea individuală a postării ?>
<?php endwhile; ?>
<?php // navigare paginată - postul următor, postul anterior... ?>
<?php else : ?>
<h3>Oops, se pare că a apărut o problemă. Vă rugăm să <a href="<?php echo get_option('home'); ?>/contact" title="Contactați-ne">ne contactați</a> și vom rezolva problema.</h3>
<?php endif; ?>
<!-- resetează interogarea WordPress -->
<?php wp_reset_query(); ?>

Mulțumesc, asta funcționează. Dar doar pentru înțelegere, știi de ce setup_postdata()
nu pare să funcționeze? L-am folosit greșit?

@jiewmeng - Verifică dacă utilizarea $post
în loc de $cp
rezolvă problema.

Eu votez pentru soluția sugerată de @t31os. Exemplele din codex arată utilizarea în acest fel, iar $post este o variabilă specială în WordPress, așa că ar putea face mai multe în interiorul unei bucle decât ceea ce ai folosit tu.

@t31os, @curtismchale, asta nu pare să funcționeze nici acum. Încă obțin același rezultat

Știu că e veche discuția, dar NU folosiți query_posts() decât dacă ȘTIȚI că aveți nevoie de ea. Este ineficientă. Uitați-vă la această imagine utilă pentru alternative: https://www.rarst.net/images/query_functions.png
