Wordpress 自定义查询:'orderby' => 'date' 在使用多个 post 类型时不起作用

Wordpress custom query: 'orderby' => 'date' not working when using multiple post types

在 Wordpress 页面模板中,我设置了一个 WP 自定义查询,它查询名为 "recipe" 的自定义 post 类型和常规 post 类型,如下所示。这行得通,但其中的 'orderby => 'date' 行不通:该页面首先列出按日期排序的常规 post,然后是按日期排序的食谱。但我需要按日期将它们全部放在一起(即混合)。

这是我的自定义查询的定义:

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$number_of_posts = get_option('posts_per_page', 12);

$args = array(
    'post_type' => array('recipe', 'post'),
    'post_status' => 'publish',
    'posts_per_page' => 12,
    'orderby' => 'date',
    'order' => 'ASC',
    'paged' => $paged
);
$my_loop = new WP_Query($args);

[...followed by the loop...]

我很感激任何提示,我可以做些什么来实现所需的排序。

Q1。您使用的是什么模板文件?

下面的查询成功地将 2 个 post 类型按日期合并在一起。

<?php
        $args = array(
          'post_type' => array('my_custom_post_type', 'post'),
          'posts_per_page' => -1,
          'order' => 'DESC',
          'orderby' => 'date',

        );
         $the_query = new WP_Query( $args );
        if ( $the_query->have_posts() ) {
          while ( $the_query->have_posts() ) {
            $the_query->the_post(); ?>
           // loop your content here
        <?php include(locate_template('templates/content.php')); ?>
        <?php
        }
        } else {
          // no posts found
        }
        /* Restore original Post Data */
        wp_reset_postdata();
        ?>

我自己找到了解决方案:

当我在定义自定义查询之前添加 remove_all_filters('posts_orderby'); 时它起作用了。显然,这会重置任何其他顺序并允许 'orderby' => 'date' 按预期运行。完整代码:

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$number_of_posts = get_option('posts_per_page', 12);

remove_all_filters('posts_orderby'); // ADDED

$args = array(
    'post_type' => array('recipe', 'post'),
    'post_status' => 'publish',
    'posts_per_page' => 12,
    'orderby' => 'date',
    'order' => 'ASC',
    'paged' => $paged
);
$my_loop = new WP_Query($args);

[...]