我在这里看到您的代码有几个问题:
你有category_name 设置为upcoming class ... 类别段塞中没有空格,因此这是错误的。如果你想拥有一切upcoming 和class 类别,然后使用upcoming,class https://developer.wordpress.org/reference/classes/wp_query/#category-parameters
您有一个元查询company 但听起来您也在尝试按自定义字段排序upcoming_class_date, 因此,此字段也需要包含在查询中。您需要将其更改为高级元查询来处理此问题。https://developer.wordpress.org/reference/classes/wp_query/#custom-field-post-meta-parameters
您说过自定义帖子类型,但您的代码post 作为岗位类型
这是我想到的一些关于如何设置查询参数的快速示例代码:
$args = array(
\'post_type\' => array( \'post\' ),
\'order\' => \'DESC\',
\'orderby\' => array( \'upcoming_class_date\' => \'DESC\', \'date\' => \'DESC\' ),
\'category_name\' => \'upcoming class\',
\'showposts\' => 40,
\'meta_query\' => array(
\'relation\' => \'AND\',
array(
\'key\' => \'company\',
\'value\' => $company,
\'compare\' => \'=\',
),
array(
\'relation\' => \'OR\',
array(
\'key\' => \'upcoming_class_date\',
\'compare\' => \'EXISTS\',
),
array(
\'key\' => \'upcoming_class_date\',
\'compare\' => \'NOT EXISTS\',
)
)
),
);
您会注意到
EXISTS 和
NOT EXISTS .. 这是因为您说过,有时一篇文章没有该字段的值——为了确保该值包含在查询中,我们必须同时添加这两个字段,并设置
relation 到
OR (这样一来,它会返回带有该字段的帖子和不带该字段的帖子)。
我看到的另一个潜在问题是保存日期的格式——这可能会导致排序问题,但您没有提供格式的详细信息。
我建议阅读关于类似问题的回答,以更好地了解WP\\U Query如何处理元查询:https://wordpress.stackexchange.com/a/285012/51201
您还可以执行orderby 使用元查询数组键(但必须将其更改为关联数组)——上面的链接中有相关的示例。