如果‘Menu_Order’大于0/0,如何获取_POST?

时间:2019-04-09 作者:Peter Westerlund

是否可以在menu\\u order大于0的位置获取帖子?当我get_posts() 但它根本没有任何效果:

\'meta_query\'     => array(
      \'key\'     => \'menu_order\'
    , \'value\'   => \'0\'
    , \'compare\' => \'>\'
)
首先,我想要的是将menu\\u order 0视为最后优先级,或者“特定menu\\u order not set”,以便如果我将post设置为1或2作为menu\\u order。这些帖子将在所有0的人面前循环发布。我应该说,所有这些都是由ASC作为订购方完成的。

我看不到任何其他的WordPress方法,只有两种get_posts() 之后,在第一个中排除所有menu\\u顺序为0的帖子,在第二个中仅获取这些帖子。

但要做到这一点,我首先必须了解如何按menu\\u顺序过滤。有人知道怎么做吗?

2 个回复
SO网友:Peter Westerlund

卡伦的回答让我对posts_where 筛选以找到更好的解决方案,以便挂接到WP\\u查询中。在谷歌搜索了一段时间后,我发现this page 这样做更好。

使用这种方法,我最终使其工作如下:

add_filter(\'posts_where\', function ($where, $query)
{
    global $wpdb;

    $label = $query->query[\'query_label\'] ?? \'\';

        if ($label === \'ignore_zero_query\')
        {   
            $where .= " AND {$wpdb->prefix}posts.menu_order > 0 ";
        }

        if ($label === \'only_zero_query\')
        {
            $where .= " AND {$wpdb->prefix}posts.menu_order <= 0 ";
        }

    return $where;

}, 10, 2);
现在我以这种方式获得帖子:

$args = array(
    \'posts_per_page\' => -1,
    \'query_label\'    => \'ignore_zero_query\',
    );
$posts_query = new WP_Query();
$posts = $posts_query->query($args);

SO网友:Karun
<?php
function ignore_zero_menu_order( $where ){    
  global $wpdb;
  $where = $where . \' AND $wpdb->posts.menu_order > 0 \';             
  return $where;
}

$args = array(      
    \'post_type\' => \'page\',
    \'meta_query\'     => array(
        \'key\'     => \'menu_order\',
        \'value\'   => \'0\',
        \'compare\' => \'>\'
    )
);


add_filter( \'posts_where\', \'ignore_zero_menu_order\' );
$query = new WP_Query($args);
remove_filter( \'posts_where\', \'ignore_zero_menu_order\' );

相关推荐

有没有办法从一个输入字段同时控制ORDER BY和ORDER查询参数

我想让用户能够通过select 在存档页上输入。最简单的方法是在前端显示两个输入:一个控制order_by 参数和其他控制order 参数但如果只有一个带有四个选项的选择输入字段,情况会好得多:最新的,最老的我试图作弊& 在每个选项的值中,但它会在URL上自动转义。<form action=\"\"> <select name=\"orderby\" id=\"\"> <option value=\"post_date&