setup_postdata () ne semble pas fonctionner?


12

Je ne sais pas pourquoi, mais j'ai utilisé get_posts()pour rechercher des données. Ensuite, j'ai utilisé setup_postdata()... Je pense que son utilisé afin que je puisse utiliser des fonctions comme the_permalink()etc avec les nouvelles données de poste?

<?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; ?>

mais il semble que ne the_excerptcontienne que la nouvelle valeur des données de publication, pourquoi? Je trouve que si j'utilise echo get_the_permalink($cp)ça marche bien. Mais je pense que la version courte sera meilleure

Réponses:


32

Je peux me tromper, mais d'après ce que je vois, "setup_postdata ()" devrait être utilisé lors d'une requête de sélection personnalisée (pas seulement query_posts): http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

De plus, si vous souhaitez utiliser des balises comme "the_title ()" et "the_permalink ()" avec cette requête de sélection personnalisée ... vous devrez utiliser le nom de variable $ post spécifiquement (pas un autre nom de variable) dans setup_postdata ( ) - AINSI - vous devez appeler global $ post avant votre boucle "foreach" ...

Donc, suivez cet exemple dans ce lien codex. Et ne changez pas le nom de variable $ post - sinon il le casse.

HTH


2
msgstr "vous devriez appeler global $ post". OUI! Pourquoi est-ce pas dans le Codex
AlxVallejo

27

Remplace le

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

avec

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

Vous devez donc utiliser la $postvariable exacte avec le setup_postdata().


Cela a résolu le problème que j'avais. Cheers mate
Jeff K.

2
Quelqu'un achète une bière à cet homme! Merci .. Avez-vous une idée de pourquoi / comment une variable locale peut jouer avec setup_postdata()?
Odys

Bizarre. Il semble tellement illogique d'exiger un nom de variable spécifique lorsque vous le transmettez en tant que paramètre.
Gavin

6

Selon l'endroit où vous utilisez setup_postdata () (s'il ne se trouve pas dans la boucle principale ou dans un widget de fonction / barre latérale, par exemple), vous devrez peut-être également déclarer -

global $post;

4

global post;ne fonctionne pas setup_postdata($post);si vous souhaitez utiliser la the_title()famille de commandes, etc.

C'est dans https://codex.wordpress.org/Function_Reference/setup_postdata

Utilisez plutôt

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

... assurez-vous également que votre $post_objectest un objet WP_Post valide.


1
Cette réponse résout en fait le problème, au lieu de réprimander l'OP: p
nodws

1

Lorsque vous interrogez des publications, utilisez simplement la boucle normale avec un ensemble d'arguments transmis. Réinitialisez ensuite la requête à la fin.

<?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(); ?>

Merci, cela fonctionne. Mais juste pour comprendre, savez-vous pourquoi setup_postdata()ne semble pas fonctionner? L'ai-je mal utilisé?
Jiew Meng

1
@jiewmeng - Voir si l'utilisation $postau lieu de $cprésout le problème.
t31os

Je vote pour le correctif proposé par @ t31os. Les exemples sur le codex montrent l'utilisation comme ça et $ post est une variable spéciale dans WordPress donc il pourrait faire plus à l'intérieur d'une boucle que ce que vous avez utilisé.
curtismchale

@ t31os, @curtismchale, cela ne semblait pas fonctionner aussi. Il donne toujours le même résultat
Jiew Meng
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.