仅显示随机帖子一次,直到所有帖子均已显示/

问题描述 投票:0回答:1

我想获取帖子类型为“广告”的随机帖子的 ID 并将其添加到数组中。该数组需要跟踪它迭代的所有帖子的 ID。

我需要获取一个随机的“广告”,获取其 ID 并将其添加到数组中。然而,数组在每个循环上都会被覆盖,我不明白为什么。

    $allPosts = array();
    $args = array( 'post_type' => 'Advertisement',
                   'posts_per_page' => 1,
                   'orderby' => 'rand');

    $loop = new WP_Query( $args ); 

    
    while ( $loop->have_posts() ) : $loop->the_post();
        array_push($allPosts, get_the_ID());
    endwhile;

    foreach($allPosts as $p) {
        echo($p);
    }
php wordpress post types while-loop
1个回答
0
投票

如果您想在重新加载页面时获得不同的帖子,您需要保存数据库中已显示的帖子列表。例如可以这样实现:

$post_type = 'Advertisement';
$option_name = 'advertisement_list';

$getAllPosts = get_option($option_name);
$allPosts = empty($getAllPosts) ? [] : $getAllPosts;

$args = [
    'post__not_in' => $allPosts,
    'post_type' => $post_type,
    'posts_per_page' => 1,
    'orderby' => 'rand'
];
$loop = new WP_Query( $args );
if($loop->have_posts()) {
    while ( $loop->have_posts() ) : $loop->the_post();
        array_push( $allPosts, get_the_ID() );
        echo get_the_ID();
    endwhile;
}
wp_reset_postdata();

$total_posts = wp_count_posts($post_type)->publish;
if(count($allPosts) == $total_posts){
    delete_option($option_name);
} else {
    update_option($option_name, $allPosts);
}
© www.soinside.com 2019 - 2024. All rights reserved.