Приветствую, всех зашедших на блог — /. Вебмастера, которые используют wordpress, для управления своими сайтами, могли сталкиваться с одной проблемой данной CMS. Проблема возникает, при попытке найти ту или иную статью на сайте, с помощью стандартного поиска по сайту wordpress. В результаты поиска довольно часто, да что там, почти всегда попадают статьи, которые могут не относиться к тому, что хотел бы найти посетитель на сайте. Связано это с тем, что стандартный поиск wordpress, выводит все результаты, где встречается искомое слово. В этом естественно есть большой минус, заключается он в том, что в результаты поиска попадают статьи, в которых может быть упомянуто искомое слово, но статья может абсолютно не иметь никакого отношения, к необходимой информации. Поэтому данную проблему необходимо решить.
Вообще на эту статью, меня подтолкнул вопрос заданный мне в комментариях блога. Так как я стандартный поиск не использую на своем блоге, поэтому и не обращал внимание на этот изъян. Я использую поиск по сайту от Яндекс. Ну да ладно, вернемся к нашей теме.
Как же нам сделать поиск wordpress более правильным, чтобы он отдавал результаты, которые действительно хотел бы увидеть пользователь? На самом деле все очень просто. При правильном написании текстов мы всегда стараемся сделать акцент на заголовке статьи, так как именно он попадет в выдачу поисковых систем, и именно от него во многом зависит перейдет пользователь всемирной паутины на сайт или нет. То есть, исходя из этого, становится ясно, что поиск wordpress станет более релевантным, если будет искать именно по title наших постов. Осталось только осуществить задуманное.
Поиск wordpress только по заголовку (title) статьи. Первый способ.
Первый способ довольно простой. Для того, чтобы поправить поиск wordpress нам необходимо открыть файл query.php, который находится в папке wp-includes, с помощью текстового редактора, например NotePad++ и найти вот такую строку:
$search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))";
И заменить на:
$search .= "{$searchand}((post_title LIKE '{$n}{$term}{$n}'))";
После этого, сохранить файл и залить его обратно на хостинг, использую например бесплатный ftp-клиент FilleZilla.
Теперь наш поиск работает так, как нам нужно и ищет только по заголовкам не используя, при этом контент. Но в данном способе тоже есть небольшой подвох. После обновления движка wordpress, эту операцию придется проделать снова, так как редактируемый файл вернется в свое исходное состояние. В принципе в этом нет ничего такого страшного, так как правка занимает буквально две минуты не более. Но все же, как нам избавиться от этой зависимости, от движка?
Поиск wordpress только по заголовку (title) статьи. Второй способ.
Этот способ также не должен вызвать никаких проблем. Но он будет более приемлем, для большинства, так как после обновления движка, все так и останется, так как в данном случае мы добавим функцию в сам шаблон.
Итак, чтобы поиск wordpress начал искать по заголовку (title) статьи, нужно открыть в текстовом редакторе файл functions.php, который находится в wp-content/themes/Наша_тема и добавить в него следующую функцию:
function __search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
После чего сохранить файл, и радоваться тому, что у нас все получилось ;-)
Важно! Данную функцию необходимо добавить до закрывающего тега ?> который находится в самом низу файла.
Я думал еще написать о третьем способе, с использованием плагинов, но передумал, так как не вижу в этом никакого смысла, тут все и так проще пареной репы: скопировал, вставил, сохранил и все.
Но для любителей коллекционировать плагины пачками даю наводку. Вот эти плагины должны вам помочь, но без гарантий, так как я не проверял их:
- Search Everything
- Search Unleashed (продвинутый плагин, для различных извращенных вариантов поиска).
На этом у меня все. Как видите, более правильный поиск wordpress сделать довольно просто. И любой посетитель вашего сайта сможет найти нужную информацию, используя поиск по заголовку (title) статьи. Не забывайте делать backup, перед редактированием файлов. И конечно же, обязательно подписывайтесь, вдруг я напишу еще, что-нибудь интересное :-P
Удачи, Друзья!
Добрый день, а как сделать, чтобы этот код не глобально на весь поиск во всех формах по сайту действовал, а только в форме поиска из плагина (который у меня отвечает за отсеивание определенных результатов) Я так понимаю, что нужно в другое место вставлять эту функцию, но куда?
@ Мария:
Здравствуйте.
Воспользуйтесь каким-нибудь плагином, подсказать не смогу.
Простите, а как сделать наоборот, чтобы поиск был только по заголовкам страниц и ничего другого не искал? Спасибо.
@ Дмитрий:
Здравствуйте. К сожалению не подскажу. Могу только предположить: Замените post_title LIKE. Но далеко не факт.
Добрый день! Подскажите пожалуйста, как сделать чтобы поиск искал информацию не только по заголовкам, но и из другой таблицы в БД?
У меня стоит плагин ziplist recipe и все данные из него хранятся в таблице wp_amd_zlrecipe_recipes.
@ Oksana:
Попробуйте добавить в function.php следующий код: