• Здравствуйте, решил настроить поиск по произвольным полям. Суть простая, добавляю в поле дополнительные названия, чтобы пост было легче найти в поиске (речь о поиске внутри сайта). Поиск по тексту статьи отключил. В итоге работает, но нагрузка на БД возросла в двое, чтобы не менять тариф хостинга, решил попробовать оптимизировать или подыскать более удачный код.

    Возможно у кого-то есть готовое решение или возможность помочь оптимизировать данный код. За помощь отправлю вознаграждение.


    Вот мой вариант, поиск идет сразу по двум полям «pole1, pole2»

    function cf_search_join( $join ) {
    global $wpdb;

    if ( is_search() ) {
    $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
    }

    return $join;
    }
    add_filter('posts_join', 'cf_search_join' );

    function cf_search_where( $where ) {
    global $pagenow, $wpdb;

    if ( is_search() ) {
    $where = preg_replace(
    "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
    "(" . $wpdb->posts . ".post_title LIKE $1) OR (" . $wpdb->postmeta . ".meta_value LIKE $1 AND " . $wpdb->postmeta . ".meta_key IN ( 'pole1', 'pole2' ) )", $where );
    }

    return $where;
    }
    add_filter( 'posts_where', 'cf_search_where' );

    function cf_search_distinct( $where ) {
    global $wpdb;

    if ( is_search() ) {
    return "DISTINCT";
    }

    return $where;
    }
    add_filter( 'posts_distinct', 'cf_search_distinct' );

Просмотр 2 ответов — с 16 по 17 (всего 17)
  • я дал вам ссылку на статью, чтобы вы поняли, что полнотекстовый поиск ( «по точному сочетанию поисковой фразы») не может быт ь быстрым. Быстрым может быть прямое или суррогатное решение по поиску отдельных слов из поисковой фразы.

    ставьте relevanssi и не ломайте себе мозг. мало того, что поиск будет и по произвольным полям, так он еще и куда лучше обычного поиска будет.

Просмотр 2 ответов — с 16 по 17 (всего 17)