按自定义字段排序存档,没有缩略图



我试图通过自定义字段排序每个Wordpress存档,所以我添加了一个动作到我的函数文件,但我有两个问题:

  1. 它只显示有这个自定义字段的帖子,我希望它显示每个帖子,但首先是那些有这个字段的帖子;
  2. 不显示post缩略图

我的动作是这样的:

add_action( 'pre_get_posts', 'my_change_sort_order'); 
function my_change_sort_order($query){
    if(is_archive())
    {
        // validate
        if( is_admin() )
        {
            return $query;
        }
        $query->set('meta_key', 'my_custom_field');
        $query->set('orderby', 'meta_value_num');    
        $query->set('order', 'DESC');

        return $query;
    }
};

根据itzmekhokan的建议,我也尝试了这个:

$meta_query = array(
        'relation' => 'OR',
        array( //check meta_key exist
            'key' => 'my_custom_field',
            'compare' => '!=',
            'value' => ''
        ),
        array( //if no meta_key exist
            'key' => 'my_custom_field',
            'compare' => 'NOT EXISTS'
        )
    );
    $query->set( 'meta_query', $meta_query );
    $query->set('meta_key', 'my_custom_field');
    $query->set('orderby', 'meta_value_num');    
    $query->set('order', 'DESC');

然后我试了这个:

$meta_query = array(
            'relation' => 'OR',
            array( //check meta_key exist
                'key' => 'my_custom_field',
                'compare' => 'EXISTS'
            ),
            array( //if no meta_key exist
                'key' => 'my_custom_field',
                'compare' => 'NOT EXISTS'
            )
        );
        $query->set( 'meta_query', $meta_query );
        $query->set('orderby', 'meta_value_num');
        $query->set('meta_key', 'my_custom_field');    
        $query->set('order', 'DESC');

总是没有成功。Wordpress只显示设置了这个字段的文章。

add_action( 'pre_get_posts', 'my_change_sort_order'); 
function my_change_sort_order($query){
if(is_archive())
{
    // validate
    if( is_admin() )
    {
        return $query;
    }
    $meta_query = array(
        'relation' => 'OR',
        array( //check meta_key exist
            'key' => 'my_custom_field',
            'compare' => '!=',
            'value' => ''
        ),
        array( //if no meta_key exist
            'key' => 'my_custom_field',
            'compare' => 'NOT EXISTS'
        )
    );
    $query->set( 'meta_query', $meta_query );
    $query->set('meta_key', 'my_custom_field');
    $query->set('orderby', 'meta_value_num');    
    $query->set('order', 'DESC');

    return $query;
}
};

您需要添加空值,其中您有'NOT EXISTS'数组比较键值:

          array( //if no meta_key exist
                'key' => 'my_custom_field',
                'value'=>'',
                'compare' => 'NOT EXISTS'
            )

另外,试着把数组中有'EXISTS'的地方改成这样:

  array( //check meta_key exist
        'key' => 'my_custom_field',
        'value'=> 'somerandomvalue123456', //value that obviously won't be in records at all 
        'compare' => '<>'
    ),

这样,查询的构造将考虑'NOT EXISTS'部分,因为值键不丢失,它会搜索其他的帖子,有这样的元键,但没有一些随机的值,你在查询中设置。这有一个特定的bug:https://core.trac.wordpress.org/ticket/23268#comment:22并且在4.1版本中存在,不确定是否仍然存在,因为在ticket中没有注释指出这个问题实际上已经解决了。

最新更新