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

2024-06-19

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

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

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

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

因为因为get_posts返回一个对象数组,我们需要使用一个排序函数来创建用户定义的比较(例如usort https://www.php.net/manual/en/function.usort.php) - 换句话说,我们告诉它要根据哪些值以及以什么顺序进行排序。

如果您正在使用PHP 7,您可以使用匿名函数进行排序和“宇宙飞船操作员”<=> https://stackoverflow.com/questions/3737139/reference-what-does-this-symbol-mean-in-php/31298778#31298778进行比较,所以这就是您所需要的:

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

UPDATE: 如果您还在使用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;
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • PHP 中的文本版本控制,具有差异突出显示

    如果您曾经在 StackOverflow 上编辑过问题 您可能已经注意到它会跟踪问题所应用的确切更改 它以一种形式显示 突出显示文本中已删除的红色部分和自特定编辑以来添加的绿色部分 我的问题是如何自己实现这样一个系统 我正在尝试使用 PHP
  • 为什么 PHP 变量以 $ 符号开头?

    有没有人思考过这个问题 为什么我们必须写 var name value 并不是var name value 是的 我知道这是 PHP 使用的语法规则 但为什么它是 标志符号 因为 PHP 是基于 Perl 的 Perl 使用 虽然 Perl
  • Swift上传文件到PHP服务器

    因此 我将文件从 swift 上传到 PHP 服务器 POST 请求按预期到达 带有标头和所有内容 但我无法从中获取任何内容 FILES 它只是一个空数组 我显然在 Swift 方面做错了什么 这是我的代码 func testUpload
  • Laravel 5.1 完成后如何捕获作业队列详细信息?

    在 Laravel 5 1 中 我希望在作业完成时收到通知 并提供有关作业的详细信息 具体来说 user id and customer id 我正在使用Queue after方法中的方法AppServiceProvider作为 Larav
  • 升级 PHP 本地实现的 Olson tz 数据库

    我正在开发一个大量使用时区的网站 该网站需要处于可用的绝对最新 tz 信息的最前沿 我已经通过tz 邮件列表 http news gmane org gmane comp time tz 我不知道的是如何让 PHP 安装在我的开发计算机和
  • PHP:使用 imagemagick 将图像转换为 TIFF

    我正在尝试使用 imagemagick 将图像转换为 tiff 但在尝试写入文件时遇到问题 我收到一条错误消息 无法打开图片 错误 blob c OpenBlob 2584 这是我正在使用的代码 im2 new Imagick image
  • 用重力形式计算复选框数量

    我正在制作一个用于夏令营注册表的表格 用户将在其中进行注册 在表格末尾 可以选择全额付款或为每个选定的营地缴纳 50 美元押金 我使用隐藏产品来处理每周的总金额并将其价值添加到总金额中 我的问题是 我是否可以使用公式来计算已选择的复选框的数
  • ios-使用 firebase 发送通知

    我正在尝试创建带有通知的应用程序 通知必须从 php 文件发送到 firebase 然后发送到设备 起初 我尝试使用 firebase 控制台发送 效果完美 但是当我尝试使用 php 发送通知时 我遇到了问题 显示已成功发送 但我没有收到任
  • PHP 中的 MD5 替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP PDF生成问题

    我使用 FPDF 在 PHP 中创建 pdf 我使用会话变量将变量在一种表单之间传递到另一种表单 当我提供一个值时 Report php
  • 是否可以动态添加代码/扩展类?

    我想为我的代码编写一种 插件 模块 系统 如果我可以在定义类后将内容 添加 到类中 那么事情会变得更加容易 例如 这样的事情 class foo public function a return b 上课了 现在我想在定义后向其中添加另一个
  • php洗一副牌

    我想使用 php 创建随机桥手的集合 我认为我可以将有序的卡片包编码为字符串 deal下面 我喜欢它有 52 个字母 同时考虑大小写 我发现了 php 函数str shuffle 所以我想我可以做以下事情 pack abcdefghijkl
  • 如何显示浏览器中发出的 API 请求的 symfony 分析器?

    我正在使用 Symfony2 FOSRest 捆绑包开发 REST api 我想知道是否有任何方法可以在开发模式下调用api app dev php 从浏览器 对应于Accept text html application xhtml xm
  • 使用 MongoDB PHP 驱动程序时的安全问题

    我有在 MYSQL 上保护 sql 注入的经验 但是在使用 php 驱动程序的 MongoDB 上我应该注意什么 在大多数页面中 我通过 GET POST 和搜索 插入系统获取数据 我通过 UDID 其他字段进行搜索 并且可以插入任何字符串
  • CodeIgniter form_validation->run() 总是返回 false?

    我是新来的CodeIgniter我一直在尝试实现表单提交功能 但是每当我按 提交 时 表单页面只会刷新并且数据库不会更新 看来 this gt form validation gt run 总是返回 false 但我不知道为什么 The 控
  • 客户端与服务器端图像压缩[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在研究用户可以上传图片的东西 图像大小不受限制 现在我有两个选择使用PHP 服务器端 压缩图像或使用
  • 删除所有出现的重复行

    如果我想删除某些字段重复的行 那么我使用 sort u k n n 但这仍然发生一件事 如果我想删除所有出现的重复项 有没有快速的 bash 或 awk 方法可以做到这一点 例如我有 1 apple 30 2 banana 21 3 app
  • 重定向后丢失会话变量

    用户填写用户名和密码 如果正确 页面会加载一些信息 例如user id到会话变量 该脚本制作了一个header Location 重定向 不知何故 下一页无法识别会话 怎么会 重定向到同一个域 并且所有页面都有session start 我
  • 提交ajax表单并停留在同一页面不起作用

    我想将用户的评论存储在我的数据库中 当用户提交时 我不想将他们重定向到新页面 我有以下代码 但它不起作用 我的 HTML 代码
  • 通过 XMLHttpRequest 将数据从 JavaScript 发送到 PHP

    再会 我正在尝试将一段简单的数据从一个 php 文件 manage php 发送到另一个 view php 我无法通过表单发送数据 我想通过 JS 脚本发送数据 这是我的尝试 var read function id xmlhttp new

随机推荐