gpt4 book ai didi

php - 如何按日期对包含通过合并 get_posts 结果创建的 WP po​​st 对象的数组进行排序?

转载 作者:行者123 更新时间:2023-12-05 01:35:16 25 4
gpt4 key购买 nike

我想通过合并 2 个单独的 get_posts 查询的结果来创建一个帖子数组,并让数组按发布日期排序。

在我下面的代码中,$args_b$args_a 的 get_posts 已合并到一个数组中,但它们是分开的: $ 的 9 个标题args_b 首先列出,然后是 $args_a 的 9 个标题。我希望它们混合,并按日期排序。我如何对它们进行排序?

<?php
$args_a = array(
'posts_per_page' => 9,
'category_name' => 'shinmatsudo',
'category__in' => array( 227 ),
'category__not_in' => array( 3 ),
'meta_query' => array(
'relation' => 'AND',
array(
'key' => '1b',
'compare' => 'NOT EXISTS'
),

array(
'key' => '1d',
'compare' => 'NOT EXISTS'
),

),
);?>


<?php
$args_b = array(
'category_name' => 'matsudo',
'posts_per_page' => 9,
'category__in' => array( 329 ),
'category__not_in' => array( 3 ),
'meta_query' => array(
'relation' => 'and',
array(
'key'=> '2a',
'value' => array('2020-02-01' , '2020-06-01'),
'compare' => 'BETWEEN',
'type' => 'DATE',
),
),
);
?>


<?php
global $post;
$my_posts= array_merge( get_posts($args_b), get_posts($args_a) );


foreach($my_posts as $post):setup_postdata($post);?>

<?php the_title(); ?>

<?php endforeach; ?>
<?php wp_reset_postdata(); ?>

最佳答案

合并 2 个单独查询的结果不会改变顺序,因此您需要自己对它们进行排序。

因为因为get_posts返回一个对象数组,我们需要使用一个排序函数,让您创建一个用户定义的比较(例如 usort )——换句话说,我们告诉它要排序的值和顺序。

如果您使用的是 PHP 7,您可以使用匿名函数进行排序和 "spaceship operator" <=> 进行比较,所以这就是您所需要的:

usort($my_posts, function($post_a, $post_b) {
// Compare the post_date of the posts, and if $post_b is newer, then it will be displayed first
return $post_b->post_date <=> $post_a->post_date;
});

(请注意,通常您会使用 return $a->value <=> $b->value; 以升序返回结果,但由于我们正在处理日期并希望最新的排在第一位,因此我们需要将比较反转为 return $b->value <=> $a->value; )

所以在你的代码中,你只需要像这样使用它:

<?php
// do your merge...
$my_posts= array_merge( get_posts($args_b), get_posts($args_a) );

// sort the resulting array...
usort($my_posts, function($post_a, $post_b) {
return $post_b->post_date <=> $post_a->post_date;
});

// and now process the new sorted array as required.
foreach($my_posts as $post):setup_postdata($post);?>
<?php the_title(); ?>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?>

更新:如果您仍在使用 PHP 5(您不应该使用!),您可以改用以下内容:

usort($my_posts, function ($a, $b) {
if ($a->post_date < $b->post_date) return -1;
elseif ($a->post_date > $b->post_date) return 1;
else return 0;
});

关于php - 如何按日期对包含通过合并 get_posts 结果创建的 WP po​​st 对象的数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63092328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com