使用WP_QUERY订购定制发布类型

时间:2021-08-04 作者:fsimmons

我想按照我在post_type 大堆或menu_position 从…起register_post_type 或者任何我可以控制的东西(除了弹性订单)。有什么建议吗?

$args = array(
    \'post_type\' => array( \'expressions\', \'videos\', \'lingo\', \'exercises\' ),
    \'tax_query\' => array(
        array(
           \'taxonomy\' => \'lesson_number\',
           \'field\'    => \'name\',
           \'terms\'    => $terms_name,
        )
    )
);

$query = new WP_Query( $args );

1 个回复
最合适的回答,由SO网友:birgire 整理而成

这里有一个插件,它使用posts_orderby 筛选以支持自定义_post_type__in 中的orderbyWP_Query 按其数组位置对帖子类型进行排序:

<?php
/**
 *  Plugin Name: Support for _post_type__in orderby in WP_Query
 *  Plugin URI:  https://wordpress.stackexchange.com/a/392910/26350
 */
add_filter ( \'posts_orderby\', function ( $orderby, \\WP_Query $q ) use ( $wpdb ) {
    // Do nothing.
    if ( \'_post_type__in\' !== $q->get( \'orderby\' ) ) {
        return $orderby;
    }

    // Custom _post_type__in ordering using FIELD on post types array items.
    $post_type = $q->get( \'post_type\' );
    
    if ( ! empty( $post_type ) && is_array( $post_type ) ) {
        $post_type__in        = array_map( \'sanitize_title_for_query\', $post_type );
        $post_type__in_string = "\'" . implode( "\',\'", $post_type__in ) . "\'";
        return $orderby       = "FIELD( {$wpdb->posts}.post_type," . $post_type__in_string . \' )\';
    }

    return $orderby;
}, 10, 2 );

Usage example:

$args = array(
    \'post_type\' => array( \'expressions\', \'videos\', \'lingo\', \'exercises\' ),
    \'orderby\'   => \'_post_type__in\',
);

$query = new WP_Query( $args );
ps:我们使用orderbypost_name__in 在这里的核心指导。然后,您可以研究如何扩展它以支持多个orderby字段。

相关推荐

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

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