Wp_Reset_postdata之后WP_QUERY未重置

时间:2019-01-09 作者:Steve Rodgers

我有此自定义查询:

if (isset($_COOKIE[\'myCookie\']) && $_COOKIE[\'myCookie\'] == $f_r) { 
    $args = array(
    \'posts_per_page\' => 4,
    \'nopaging\' => false,
    \'order\'    => \'ASC\',
    \'orderby\'  => \'rand\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'Count\',
            \'field\' => \'slug\',
            \'terms\' => $f_r,
                   )
        )    
    );

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

while ( $query->have_posts() ) {

$query->the_post();

    <a href="<?php the_field(\'the_link\'); ?> ">
    <img src="<?php echo the_field(\'the_img\'); ?>" />
    </a>  

} else {

    echo \'Oops! Something went wrong!\';

}

wp_reset_postdata();
查询可以工作,但不会重置数据。每次访问者登陆查询所在的页面时,都会显示与往常完全相同的4篇帖子。

这段代码在我的本地环境中运行得很好(每次运行时都会获取不同的帖子),但在实时服务器上,它似乎“固定”为4篇特定帖子。

我不明白为什么会这样,所以我真的需要一些建议。谢谢

附:这不是插件或主题,因为它在本地环境中工作良好。

3 个回复
SO网友:Pabamato

如果在服务器级别禁用order by RAND,您可以尝试手动执行RAND,方法是先运行查询并获取ID,然后从结果中运行新查询,包括x个随机帖子ID:

$get_all_args = array(
    \'fields\'  => \'ids\',
    \'posts_per_page\' => 99,
    \'order\'    => \'DESC\',
    \'orderby\' =>  \'modified\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'Count\',
            \'field\' => \'slug\',
            \'terms\' => $f_r,
        )
    )    
);


$query_all = new WP_Query( $get_all_args );

// additional code and checks
// ...
// ...

wp_reset_postdata();

$args = array(
    \'post__in \' => array_rand(array_flip( $query_all ), 4)
);
$query = new WP_Query( $get_all_args );

// additional code and checks
// ...
// ...

wp_reset_postdata();
你将从最新修改的帖子中随机获得4篇帖子,注意我没有使用\'posts_per_page\'=> -1 因为这不是一个好的做法,可能会损害您的网站速度

SO网友:ClodClod91

尝试使用

wp_reset_query(); wp_reset_postdata();

如您所见:documentation使用wp\\U reset\\u query和wp\\U reset\\u postdata reset query和原始Post数据

SO网友:Arturo Gallegos

如果您检查一下,您在一段时间后丢失了一个}

while ( $query->have_posts() ) {

} else {
请尝试使用

if ( $query->have_posts() ) {

while ( $query->have_posts() ) {

$query->the_post();

    <a href="<?php the_field(\'the_link\'); ?> ">
    <img src="<?php echo the_field(\'the_img\'); ?>" />
    </a>  

}
} else {

    echo \'Oops! Something went wrong!\';

}

wp_reset_postdata();
wp_reset_query();

相关推荐

如何在WooCommerce_Account_Orders函数中传递$CURRENT_PAGE?

woocommerce功能woocommerce_account_orders($current_page) 已调用1个参数$current_page. 该函数通过调用woocommerce_account_orders_endpoint 通过以下挂钩-add_action( \'woocommerce_account_orders_endpoint\', \'woocommerce_account_orders\' );然而,在上述挂钩中,$current_page 未在函数中作为参数传递。情况如何$c