在Pre_Get_POST操作中按多个orderby参数对WordPress存档进行排序

时间:2014-12-02 作者:Christian Witt

实际上这是我函数中的私有函数。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;    
};
有没有专家能给我解释一下那个错误?

1 个回复
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 通过它。

结束

相关推荐