根据隐藏帖子的元值对帖子进行排序,而不是重新排序

时间:2017-10-25 作者:Randomer11

下面的代码假设在所有标准帖子上方显示带有“featured\\u listing”元键的所有帖子。

当以下代码在功能中时。php,它隐藏了所有没有“featured\\u list”meta的帖子。而不是在特色列表下方显示它们。

function custom_special_sort( $query ) {
     if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }
    // if is this the main query and is this post type of business
    if ( (is_post_type_archive(\'business\') ) || (is_tax (\'location\') ) ) {

        // order results by the meta_key \'featured_listing\'
       $query->set( \'meta_key\', \'featured_listing\' );
        $query->set( \'orderby\', \'featured_listing\' );
        $query->set( \'order\', \'DESC\' );

    }
}
add_action( \'pre_get_posts\', \'custom_special_sort\' );

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

在更新这篇文章几秒钟后,我找到了解决方案。。。。同样,我之前一定看过这篇文章,但没有正确输入详细信息,因为我之前尝试过这篇文章。:)

    add_action(\'pre_get_posts\', \'add_special_sort\', 11, 1);
function add_special_sort($query){
  // Bail if not the main "hidden" query, as opposed to a \'new WP_Query()\' call
  if(!$query->is_main_query())
    return;

  $query->set(\'meta_query\', array(
    \'relation\' => \'OR\',
    array(
      \'key\' => \'featured_listing\',
      \'compare\' => \'NOT EXISTS\',
    ),
    array(
      \'key\' => \'featured_listing\',
      \'compare\' => \'EXISTS\',
    )
  ));
  //$query->set(\'meta_key\', NULL);
  $query->set(\'orderby\', array(\'meta_value_num\' => \'DESC\', \'date\' => \'DESC\'));
}

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在