WP: Объедините расширенный поиск по настраиваемым полям с meta_query - PullRequest
0 голосов
/ 05 сентября 2018

Я расширил возможности поиска, поэтому параметр s в поиске WP_Query в таблице wp_postmeta также - 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' );

Но в моем случае мне также нужно использовать meta_query на pre_get_posts hook;

Упрощенное действие:

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 не дал никаких результатов. Возможно ли объединить эти две таблицы таким образом?

...