• Здравствуйте
    Нужно доработать код, который добавляет поиск по метаполю в обычный поиск.
    Данный код ищет по заголовку, контенту и одному метаполю.

    Нужно отключить поиск по контенту и сделать поиск по двум метаполям. В итоге поиск должен работать по заголовку и двум полям.

    Есть много других вариантов, как реализовать такой поиск, в том числе плагины, но мне нужно доработать именно этот код. Конкретно данный код работает очень быстро и не нагружает сервер если в таблицу wp_postmeta добавить индекс для поля meta_key

    Вот сам код

    add_filter( 'posts_clauses', 'km_metadata_search' );

    # Добавляем поиск по метаполям в базовый поиск WordPress
    function km_metadata_search( $clauses ){
    global $wpdb;

    if( ! is_search() || ! is_main_query() )
    return $clauses;

    $clauses['join'] .= " LEFT JOIN $wpdb->postmeta kmpm ON (ID = kmpm.post_id)";

    $clauses['where'] = preg_replace(
    "/OR +\( *$wpdb->posts.post_content +LIKE +('[^']+')/",
    "OR (kmpm.meta_value LIKE $1) $0",
    $clauses['where']
    );

    // если нужно искать в указанном метаполе
    $clauses['where'] .= $wpdb->prepare(' AND kmpm.meta_key = %s', 'my_meta_key' );

    $clauses['distinct'] = 'DISTINCT';

    // дебаг итогового запроса
    0 && add_filter( 'posts_request', function( $sql ){ die( $sql ); } );

    return $clauses;
    }