如何在调用Get_Posts()后有效地重置POST对象

时间:2011-05-26 作者:Scott B

下面的函数是从我的索引调用的。php位于主内容块的正下方。其目的是写出最新帖子的链接列表。但是,一旦此函数完成,我需要重置post对象(或者后面的侧栏查询认为当前post是此函数执行的最后一篇post)

如何将帖子重置回页面的当前帖子?

我尝试在函数末尾添加wp\\u reset\\u query(),但它并没有产生我想要的结果(在内容区域中生成多篇帖子)。非常感谢您的帮助。

function myFunction(){
    $catHidden=get_cat_ID(\'hidden\');
    $myquery = new WP_Query();
    $myquery->query(array(\'cat\' => "-$catHidden",\'post__not_in\' => get_option(\'sticky_posts\')));
    $myrecentpostscount = $myquery->found_posts;
    if ($myrecentpostscount > 0){ ?>
        <div>
            <h4>Menu Title</h4>
            <ul>
            <?php 
            global $post;
            $myrecentposts = get_posts(array(\'post__not_in\' => get_option(\'sticky_posts\'), \'cat\' => "-$catHidden",\'numberposts\' => get_option(\'latest_count\')));
            foreach($myrecentposts as  $idxrecent=>$post) { ?>
                <li class="page_item">
                    <a href="<?php the_permalink(); ?>"><?php if(has_post_thumbnail() && get_option(\'show_thumbs\')) the_post_thumbnail(\'thumbnail\', array(\'class\' => \'alignleft\', \'style\' => \'margin:0 10px 0 0;\')); ?><?php the_title(); ?></a>
                    <?php  
                        if(has_post_thumbnail() && get_option(\'show_thumbs\')) echo \'<div style="clear:both">&nbsp;</div>\';?>
                </li>
            <?php } 
    echo "</ul></div>";}}

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

wp_reset_query() 将查询重置为WordPress在此页面上执行的原始查询。如果你在什么地方打过电话query_posts(), 它不会重置回该查询,而是重置回“main”查询。

您可能想使用wp_reset_postdata(), 重置$post 变量到中的当前帖子$wp_query.

最好不要覆盖全局$post 函数中的变量。所有WordPress函数都有接受post对象的变量,因此不需要在那里使用全局变量。

SO网友:Mike

我认为这里的问题可能与包含global$post语句以及使用get\\u posts有关。

实际上,您需要两次调用帖子,一次是使用新的WP\\u查询(只是为了检查返回的帖子数量),第二次是使用get\\u posts。

第一次检查时,它返回了主变量$myquery->posts下的帖子;

您也不想使用found\\u帖子,因为它似乎没有返回正确的数字。改用$myquery->post\\u count。

一旦去掉了global$post和get\\u posts,就可以更改found\\u posts变量,这样就不会再污染数据了。我用过这个:

$posts=new WP_Query(//array details);
if($posts->have_posts()) : 
    while($posts->have_posts()) : $posts->the_post();
    $thispost=$posts->post;

        // do stuff with the post, if you need things like the_permalink, use get_permalink($thispost->ID) instead.
    endwhile;
endif;
而且它根本没有破坏我的数据。虽然这有点麻烦,因为您不能使用常规的\\u标题、内容等。。但无论如何,您都可以使用基于id的get过滤器——如果您需要针对常客的特定过滤器,您也可以在拉取的内容上使用它们。

结束

相关推荐