WP:结合使用meta_query通过自定义字段扩展搜索

时间:2018-09-05 18:14:24

标签: mysql sql wordpress search meta-query

我具有扩展的搜索功能,因此wp_postmeta表中的WP_Query搜索中的s参数-https://codex.wordpress.org/Plugin_API/Filter_Reference/posts_join 而且效果很好。

function search_join( $join ) {
  global $wpdb, $wp_query;

  if ( is_search() && !empty($wp_query->query_vars['s']) ) {
    if(empty($wp_query->query_vars['meta_query'])) {
        $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }
  }

  return $join;
}

add_filter( 'posts_join', 'search_join' );

但就我而言,我还需要在pre_get_posts钩子上使用meta_query;

简化操作:

add_action( 'pre_get_posts', 'filter_properties' );
function filter_properties( $query ) {
  if ( ! empty( $_GET['beds'] ) ) {
    $meta_query['beds'] = array( 'key' => 'beds', 'value' => (int) $_GET['beds'], 'compare' => '>=', 'type' => 'numeric' );
  }
  if ( $meta_query ) {
     $query->set( 'meta_query', $meta_query );
  }
  return;
}

如果工作正常,直到它们分别工作。 enter image description here

但是当两个字段都填满时-没有结果。 换句话说,我们有与此类似的SQL-

SELECT * FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE wp_postmeta.meta_value=1400 AND wp_posts.post_type="neighborhoods" AND (wp_postmeta.meta_key="beds" AND wp_postmeta.meta_value >= 3)

此SQL没有返回任何结果。实际上有可能以这种方式组合这两个表吗?

0 个答案:

没有答案