Setup_postdata()似乎不起作用?

时间:2011-02-19 作者:Jiew Meng

我不知道为什么,但我用过get_posts() 查询某些数据。然后我用setup_postdata() ... 我认为它的使用是为了我可以使用如下函数the_permalink() 等与新的职位数据?

<?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 包含新的post数据值,为什么?我发现如果我使用echo get_the_permalink($cp) 它工作正常。但我认为更短的版本会更好

6 个回复
最合适的回答,由SO网友:Jennifer Stuart 整理而成

我可能错了,但据我所知,在执行自定义选择查询(不仅仅是query\\u posts)时,应该使用“setup\\u postdata()”:http://codex.wordpress.org/Displaying_Posts_Using_a_Custom_Select_Query

同样,如果您想在自定义select查询中使用诸如“the\\u title()”和“the\\u permalink()”之类的标记。。。您需要使用变量名$post 特别是(不是另一个变量名)在setup\\u postdata()中-以及-您应该调用global $post 在“foreach”循环之前。。。

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

HTH公司

SO网友:WP-Silver

更换

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

foreach ( $childPosts as $post ) : setup_postdata( $post );
所以你需要使用$post 变量随setup_postdata().

SO网友:David Gard

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

global $post;

SO网友:Ryan Taylor

global post; 不适用于setup_postdata($post); 如果要使用the_title() 命令系列等。

它在里面https://codex.wordpress.org/Function_Reference/setup_postdata

而是使用

// global $post; setup_postdata($post_object); //don\'t do this!
setup_postdata( $GLOBALS[\'post\'] =& $post_object );
。。。还要确保$post_object 是有效的WP\\U Post对象。

SO网友:Aurovrata

这项工作的两个重要方面,

使用全局$post变量设置postdata,否则循环函数将看不到自定义post对象。

非常重要:一定要打电话wp_reset_postdata() function 在循环结束时,您可能会出现奇怪的错误,这将很难调试。

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

SO网友:curtismchale

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

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

结束

相关推荐