我试图通过自定义字段排序每个Wordpress存档,所以我添加了一个动作到我的函数文件,但我有两个问题:
- 它只显示有这个自定义字段的帖子,我希望它显示每个帖子,但首先是那些有这个字段的帖子;
- 不显示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中没有注释指出这个问题实际上已经解决了。