使用最先显示的帖子ID添加到搜索帖子查询数组

时间:2018-10-11 作者:BenB

有没有办法添加帖子ID数组,将帖子设置在搜索结果的顶部?

类似于在搜索范围内添加param top\\u post\\id:

$query->set( \'top_post_ids\', [45, 78, 94 ] );
如果这些帖子将出现在搜索结果中,它们应该位于顶部。

粘性帖子不能解决这个问题,在这种情况下,必须是帖子ID的数组。

搜索是通过WordPress Rest Api进行的,因此我无法修改调用搜索的模板文件。

example.com/wp-json/wp/v2/posts?search=car&per_page=12&page=1

1 个回复
SO网友:Friss

这不是最优雅的解决方案,但您可以在搜索页面上对结果进行排序:

在页面顶部,使wp\\u查询变量可用

global $wp_query;
在后面的代码中,如果有一些结果:

if ( have_posts() ) { 

  //your desired order
  $order = array(45, 78, 94);

  // a comparison function to sort the post array with your custom one
  function sortByIds($a, $b){
     global $order;
     $a = array_search($a->ID, $order);
     $b = array_search($b->ID, $order);
     return $a - $b;
  }       

  //we use usort to sort the wp_query post using a comparison function
  // note, we could use a closure if your php version supports it
  usort($wp_query->posts,\'sortByIds\');

  //then your normal code....
}
这不是一个sql解决方案,但它可以工作。

结束

相关推荐

WP_Query order by two values

我试图让WP\\u查询按两个不同的值排序,但我不知道怎么做。我试图通过结束时间在一个查询中获取事件。在每个datetime值为YYYY-MM-DD H:i:s的事件中都有自定义的ending\\u date\\u time字段。我需要查询以获取值,以便第一个是最接近结束的事件,依此类推,如果有已结束的事件,则它们位于尚未结束的事件之后。使用MySQL,我会这样做:SELECT * FROM events ORDER BY event_endtime < NOW(), event_endtime AS