实际上这是我函数中的私有函数。php可以工作,但是:我经常在第一次加载时收到服务器的错误500,通常它在重新加载页面后呈现。
## change the sorting order on archive pages: order archive by title
add_action( \'pre_get_posts\', \'gpsp_change_sort_order\');
function gpsp_change_sort_order($query) {
if(is_archive() && $query->is_main_query()) :
$query->set(
\'meta_query\',
array(
\'relation\' => \'OR\',
array( \'key\' => \'ausgabe\', \'value\' => \'\', \'compare\' => \'EXISTS\', \'type\' => \'NUMERIC\' ),
array( \'key\' => \'position\', \'value\' => \'\', \'compare\' => \'EXISTS\', \'type\' => \'NUMERIC\' )
));
$query->set( \'orderby\', \'meta_value position\' );
$query->set( \'meta_key\', \'ausgabe\' );
$query->set( \'order\', \'ASC\' );
endif;
};
有没有专家能给我解释一下那个错误?
SO网友:Pieter Goosen
我不是专家,但你有几个问题
首先,is_archive()
应为的对象$query
. 您还应该将功能定位在前端。回想起pre_get_posts
更改all 的实例WP_Query
, 前端and 后端。
所以这条线
if(is_archive() && $query->is_main_query()) :
应该是这样的
if( !is_admin() && $query->is_archive() && $query->is_main_query()) :
我无法理解你的逻辑
meta_query
还有你的订单。我真的不确定你点的菜是否真的管用。在指定一个键并按另一个键排序时,您应该真正了解这一点
我在这里看到的另一个可能的问题是,您正在使用OR
在您的meta_query
. 您正在检索具有meta_key
或其他meta_key
. 如果没有帖子有一个或另一个,会发生什么meta_key
. 这将如何影响您的订购,如果有错误,将触发哪些错误。坦率地说,我还没有测试过这样的场景,所以这可能是一个什么都没有的尝试,但要记住仍然很有用
您可能需要进行一些检查,以确保密钥存在,然后再尝试orderby
通过它。