是否忽略/跳过ORDERBY MENU_ORDER上的默认值?

时间:2015-07-02 作者:Jorge Y. C. Rodriguez

是否有办法查询所有页面并按顺序排序menu_order but 忽略默认值为0?

我试着这样做:

        $the_query = array( 
            \'post_type\' => self::POST_TYPE, 
            \'posts_per_page\' => $total, 
            \'product_cat\' => $product_category_name, 
            \'orderby\' => $orderby,
            \'suppress_filters\' => \'0\' 
        );
或者我需要创建一个过滤器来改变WP_Query? 有什么想法吗?

干杯

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

您可以尝试以下迷你插件(未测试):

<?php
/**
 * Plugin Name: Support for ignoring the default menu order in WP_Query
 * Description: Uses the _ignore_default_menu_order argument
 * Plugin URI:  http://wordpress.stackexchange.com/a/193291/26350
 */
add_filter( \'posts_where\', function( $where, $q )
{
    global $wpdb;

    if( (bool) $q->get( \'_ignore_default_menu_order\' ) ) {
        $where .= "AND {$wpdb->posts}.menu_order <> 0";
    }
    return $where;

}, 10, 2 );
然后,您应该能够使用新的自定义查询参数,如:

$query = new WP_Query( 
    [ 
        \'_ignore_default_menu_order\' => true,
    ]
);
以默认菜单顺序忽略帖子(0).

您还可以扩展它,以支持任何菜单顺序作为用户输入。

SO网友:Prakash Kumar

下面的代码对我来说很好,即使是定制的插件也可以Intuitive CPO

add_action( \'pre_get_posts\', \'custom_pre_get_posts\', 20, 1);

function custom_pre_get_posts($wp_query) {

    if(isset($wp_query->query[\'_ignore_default_menu_order\']) && $wp_query->query[\'_ignore_default_menu_order\']) {
        $wp_query->set( \'orderby\', $wp_query->query[\'orderby\'] );
        $wp_query->set( \'order\', $wp_query->query[\'order\'] );
        unset($wp_query->query_vars[\'_ignore_default_menu_order\']);
    }
}

结束

相关推荐

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

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