我正在尝试按自定义元值对我的主页帖子进行排序。有人告诉我应该使用pre_get_posts
但我似乎没有正确地实施它。
这就是我正在做的:
add_filter(\'pre_get_posts\',\'alter_query\');
function alter_query($query){
if( $query->is_home() ){
$query->set( \'meta_key\', \'key name\' );
$query->set( \'orderby\', \'meta_value_num\' );
$query->set( \'order\', \'DESC\' );
}
return $query;
}
当我使用上述功能时,主页查询没有返回所有帖子,也没有正确排序;我想知道我是否会用正确的方法来做这件事。
最合适的回答,由SO网友:s_ha_dum 整理而成
您可能还需要:
$query->set( \'ignore_sticky_posts\', true );
这将防止粘性帖子拖到顶部。
可能:
$query->set( \'posts_per_page\', -1 );
如果你得到的帖子太少。
-1
表示“全部”。您可以使用它来更改为后端中设置的数字以外的数字。
几点注意事项:
$query->set( \'meta_key\', \'key name\' );
将限制结果meta_key
如果您的meta_value
对于key name
这不是一个真正的数字推理器不会正常工作。标点符号和字母会把事情搞砸is_home
可能很奇怪。确保它能满足你的需要除此之外,你还需要更详细地解释“没有退回所有帖子,也没有正确订购”。