setup_postdata () não parece estar funcionando?

9

Não sei por que, mas usei get_posts() para consultar alguns dados. Então eu usei setup_postdata() ... eu acho que é usado para que eu possa usar funções como the_permalink() etc com os novos dados de postagem?

<?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() ?>">Read more ...</a></p>
  <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?>
</article>

<?php endforeach; ?>

mas parece que somente the_excerpt contém o novo valor de dados de postagem, por que isso acontece? Eu acho que se eu usar echo get_the_permalink($cp) funciona ok. Mas acho que a versão mais curta será melhor

    
por Jiew Meng 19.02.2011 / 15:50

5 respostas

26

Eu posso estar errado, mas pelo que estou vendo, "setup_postdata ()" deve ser usado ao fazer uma consulta de seleção personalizada (não apenas query_posts): enlace

Além disso, se você quiser usar tags como "the_title ()" e "the_permalink ()" com essa consulta de seleção personalizada ... você precisará usar o nome da variável $ post especificamente (não outro nome de variável) em setup_postdata () - TÃO BEM - você deve chamar global $ post antes do seu loop "foreach" ...

Então, basicamente, siga esse exemplo nesse link do códice. E não altere o nome da variável $ post - caso contrário, ela é quebrada.

HTH

    
por Jennifer Stuart 22.02.2011 / 19:02
22

Substitua o

foreach ( $childPosts as $cp ) : setup_postdata( $cp );

com

foreach ( $childPosts as $post ) : setup_postdata( $post );

Então, você precisa usar a variável exata $post junto com setup_postdata() .

    
por WP-Silver 24.08.2011 / 23:12
5

Dependendo de onde você está usando setup_postdata () (se ele não estiver no loop principal, ou em um widget de função / barra lateral, por exemplo), você também pode precisar declarar -

global $post;
    
por David Gard 21.09.2011 / 17:50
4

global post; não funciona com setup_postdata($post); se você quiser usar a família de comandos the_title() , etc.

Está em enlace

Em vez disso, use

// global $post; setup_postdata($post_object); //don't do this!
setup_postdata( $GLOBALS['post'] =& $post_object );

... também certifique-se de que seu $post_object é um objeto WP_Post válido.

    
por Ryan Taylor 14.09.2016 / 01:40
1

Ao consultar postagens, basta usar o loop normal com um conjunto de argumentos passados para ele. Em seguida, redefina a consulta no final.

<?php 

    // makes query respect paging rules
    $paged = get_query_var('paged');

    // defining the arguements for the custom loop
    $variablenameQuery = array(
        'post_type'                 => 'seating-charts',
        'post_status'               => 'publish',
        'cust_tax_name'             => 'custom-tax-term',
        'posts_per_page'            => -1, // neg 1 means all posts
        'orderby'                   => 'date',
        'order'                     => 'ASC',
        'paged'                     => $paged,
    ); // end query

    // pass result into query_posts to get result
    query_posts($variablenameQuery);

?>
<?php if (have_posts()) : ?>

    <?php while (have_posts()) : the_post(); ?>

        <?php // Individual Post Styling ?>

    <?php endwhile; ?>

        <?php // paged navigation - next post, previous post... ?>

    <?php else : ?>

    <h3>Ooops looks like there was an issue. Please <a href="<?php echo get_option('home'); ?>/contact" title="Contact Us">get in touch</a> with us and we'll get the problem fixed.</h3>

<?php endif; ?>

<!-- resets the WordPress Query -->
<?php wp_reset_query(); ?>
    
por curtismchale 19.02.2011 / 15:55

Tags