setup_postdata()似乎不起作用?


12

我不确定为什么,但是我曾经get_posts()查询过一些数据。然后我用了setup_postdata()...我想用了它,这样我就可以the_permalink()在新的发布数据中使用诸如etc之类的功能?

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

但是似乎只the_excerpt包含新的帖子数据值,为什么呢?我发现如果我使用echo get_the_permalink($cp)它也可以。但我认为较短的版本会更好

Answers:


32

我可能是错的,但是从我所看到的情况来看,在执行自定义选择查询(而不仅仅是query_posts)时应使用“ setup_postdata()”:http : //codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

同样,如果您想在自定义选择查询中使用“ the_title()”和“ the_permalink()”之类的标签,则需要在setup_postdata()中专门使用变量名$ post(而不是其他变量名)( )-很好-您应该在“ foreach”循环之前调用全局$ post ...

因此,基本上在该Codex链接中遵循该示例。并且不要更改变量名$ post,否则会破坏它。

高温超导


2
“您应该调用global $ post”。是!这是为什么不法典
AlxVallejo

27

更换

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

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

因此,您需要将精确$post变量与一起使用setup_postdata()


这解决了我遇到的问题。干杯队友
Jeff K.

2
有人给这个男人买啤酒!谢谢..知道为什么/如何使局部变量混乱setup_postdata()吗?
奥德斯2016年

奇怪的。在将其作为参数传递时,要求使用特定的变量名似乎是不合逻辑的。
加文

6

根据您使用setup_postdata()的位置(例如,如果它不在主循环或函数/边栏小部件中),则可能还需要声明-

global $post;


1

查询帖子时,只需使用普通循环,并在其中传递一组参数即可。然后在最后重置查询。

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

谢谢,这有效。但是仅仅为了理解,您知道为什么setup_postdata()似乎不起作用吗?我用错了吗?
孟梦

1
@jiewmeng-查看是否使用$post代替来$cp解决问题。
t31os 2011年

我投票支持@ t31os提出的解决方案。Codex上的示例显示了这样的用法,$ post是WordPress中的一个特殊变量,因此它在循环中可能比您使用的更多。
curtismchale 2011年

@ t31os,@ curtismchale,似乎也没有起作用。它仍然给出相同的结果
Jiew Meng
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.