WordPress元查询空值顺序

时间:2020-07-30 作者:user319940

我有个习惯WP_Query 按两个元字段(日期和时间)对某些事件进行排序。

$args = array(
    \'post_type\' => \'event\',
    \'posts_per_page\' => 10,
    \'meta_query\' => array(
        \'relation\' => \'AND\',
        \'date_clause\' => array(
            \'key\' => \'date\',
        ),
        \'time_clause\' => array(
            \'key\' => \'time\',
        ), 
    ),
    \'orderby\' => array( 
        \'date_clause\' => \'ASC\',
        \'time_clause\' => \'ASC\',
    ),
);
$query = new WP_Query( $args );
大多数事件都有日期和时间,但我们偶尔可能会遇到以下两种情况之一的事件:

一个没有日期或时间的事件(希望它显示在最后)一个有日期但没有时间的事件(这会按日期正确排序,但没有时间的事件会首先显示,我们希望这些事件显示在最后)有没有一种好的方法来实现这一点,而不需要额外的元字段?

1 个回复
SO网友:mozboz

通常情况下,如果排序顺序不能按照您需要的顺序自动生成内容,那么就没有好的方法来实现这一点。这是因为WP\\U查询不允许插入表示“按字段X排序”的逻辑except 如果$some\\u条件\'

在某个地方,你必须为你想要的东西出现的顺序编写逻辑,我认为在你查询WP\\u查询和拥有“表示”代码的地方之外的一个地方整齐地编写逻辑是有意义的。

然而,正如您所知,为了便于参考,有几种方法可以实现您的目标,我向您推荐:

  1. Write a new meta_value that stores the order
钩住可能添加或更新此帖子类型的每个位置,并使用一个函数写入连续的帖子元值,您可以使用它轻松地在WP\\u查询中排序。这为您提供了最大的灵活性,可以使用PHP代码定义排序,而且很少运行,因此速度很快。

优点:快速,便于查询,使用WP\\u Query的所有功能
缺点:可能是一些复杂的PHP。一定要把它挂在所有正确的地方。

  1. Run and render multiple WP_Query\'s for each case
如果您有两个案例要按WP\\U查询不支持的顺序显示,例如您有一些空值出现在列表的错误端,则此选项有时很有用。您需要在一个WP\\u查询中查询空值,然后运行另一个查询,其中包含您想要排序的内容和一个条件,即“不是空值”:

优点:最简单的演示代码
缺点:您可能需要重复UI演示(循环)。仅支持较简单的情况

  1. Get all posts into an array and then sort them how you want:get_posts() 获取所有内容,然后进行一些自定义编码,以按您想要的顺序对它们进行排序或输出。

    优点:正是你想要的顺序。订购代码和演示代码<缺点:代码复杂,可能需要滚动您自己的分页

    1. Inject custom ORDER BY SQL
    您可以使用例如\'posts_orderby\' 滤器这些可能包括复杂的SQLORDER BY CASE 允许您编写任意复杂排序语句的语句,但这将涉及到一些复杂的SQL

    优点:所有PHP/presentation代码都简化了
    缺点:需要编写复杂的SQL。将来可能会中断WP\\U查询

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post