更改回调wp_Query的POSTS_ORDERBY?

时间:2017-10-31 作者:dingo_d

我发现this answer 这有助于在我的搜索查询中按帖子类型对查询结果排序。但问题是当我去

https://example.com/?s=query%20string
如果我使用原生php搜索进行搜索。这太棒了。但我也可以通过ajax进行搜索——当我键入时,ajax将调用在自定义rest端点上注册的回调函数。

因此,我想知道是否有任何方法可以识别该自定义查询,以便重用该过滤器?在条件中:

if ( ! is_admin() && is_search() && is_my_custom_search_query() ) { 
另一种方法是尝试重写CASE 订购方收件人WP_Query 我不确定这是否可能tbh。

ajax的搜索查询如下所示:

  $query_string   = sanitize_text_field( wp_unslash( $_GET[\'searchString\'] ) );
  $page_no        = intval( $_GET[\'pageNo\'] );
  $posts_per_page = 9;
  $offset         = ( $page_no - 1 ) * $posts_per_page;

  $search_args = array(
      \'posts_per_page\' => $posts_per_page,
      \'post_status\'    => \'publish\',
      \'perm\'           => \'readable\',
      \'s\'              => $query_string,
      \'offset\'         => $offset,
  );

  $search_results = new WP_Query( $search_args );

1 个回复
SO网友:dingo_d

好的,找到答案了!我补充道\'query_id\'我的查询中的参数

$query_string   = sanitize_text_field( wp_unslash( $_GET[\'searchString\'] ) );
$page_no        = intval( $_GET[\'pageNo\'] );
$posts_per_page = 9;
$offset         = ( $page_no - 1 ) * $posts_per_page;

$search_args = array(
    \'posts_per_page\' => $posts_per_page,
    \'post_status\'    => \'publish\',
    \'perm\'           => \'readable\',
    \'s\'              => $query_string,
    \'offset\'         => $offset,
    \'query_id\'       => \'my_custom_ajax_search\',
);

$search_results = new WP_Query( $search_args );
之后在我的过滤器中

add_filter( \'posts_orderby\', \'my_order_search_by_posttype\', 10, 2 );

function my_order_search_by_posttype( $orderby, $wp_query ) {
    if ( ! is_admin() && ( is_search() || isset( $wp_query->query[\'query_id\'] ) && $wp_query->query[\'query_id\'] === \'my_custom_ajax_search\' ) ) {
...
    }
}
而且很有效!:)

结束

相关推荐

how to search everything

我们有一个使用BuddyPress、bbPress等的Wordpress内部网。。从…起this article, 我调整了主题searchform.php 包括:<input type=\"hidden\" name=\"post_type[]\" value=\"docs\" /> <input type=\"hidden\" name=\"post_type[]\" value=\"events\" /> <input type=\"hidden\" n