Intereting Posts
Проблема с permalink в WordPress Как добавить субдомен в htaccess Не удается заставить future_to_publish работать Jetpack: доступ к статистике посетителя в храме Добавить пользовательское поле в поле комментариев ПОСЛЕ текстовой области НО ПЕРЕД отправкой кнопки call_user_func_array () после миграции сайта с помощью InstantWP Есть ли способ отправить HTML-форматированные письма с помощью функции wp_mail WordPress? Запросить сообщения, выполнив поиск строки в мета-поле Перепишите уродливый URL-адрес для очистки URL-адреса Выпадающий список Тип расширенного списка TinyMCE <? php wp_list_comments (); ?> возможно ли получить полный код на странице comments.php Сохранить критерии поиска для каждого пользователя и показать на пользовательской странице пользователя Создание страницы PHP для перенаправления вручную как продлить WP_widget дважды Как проверить, истинна ли отладка, и могу ли я использовать ее для собственного кода?

Расширение поиска по сайту для включения отдельного настраиваемого поля

У меня есть код подзаголовка в моем файле functions.php

function __adapted_search_function($search, $query) { if(is_admin() || !$query->is_main_query() || !$query->is_search) return; //determine if we are modifying the right query global $wpdb; $search_term = $query->get('s'); $search = ' AND ('; //point 1 $search .= "($wpdb->posts.post_title LIKE '%$search_term%')"; //need to add an OR between search conditions $search .= " OR "; //point 2 $search .= "($wpdb->posts.post_excerpt LIKE '%$search_term%')"; //need to add an OR between search conditions $search .= " OR "; //point 3 $search .= "($wpdb->postmeta.meta_key = 'mcb-product' AND $wpdb->postmeta.meta_value LIKE '%$search_term%')"; //add the filter to join, sql will error out without joining the tables to the query add_filter('posts_join', '__custom_join_tables'); return $search . ') '; } function __custom_join_tables($joins) { global $wpdb; $joins = "JOIN $wpdb->postmeta ON ($wpdb->postmeta.post_ID = $wpdb->posts.ID)"; return $joins; } 

Я надеялся, что будет искать только заголовок, отрывок, а также отдельное поле.

Он работает, если я удаляю соединение, но на самом деле нужно включить его, может ли кто-нибудь увидеть, где я ошибся?

Solutions Collecting From Web of "Расширение поиска по сайту для включения отдельного настраиваемого поля"

Мне удалось решить, расширив запрос

 function extend_search( $search, &$wp_query ) { global $wpdb; if ( empty( $search )) return $search; $terms = $wp_query->query_vars[ 's' ]; $exploded = explode( ' ', $terms ); if( $exploded === FALSE || count( $exploded ) == 0 ) $exploded = array( 0 => $terms ); $search = ''; foreach( $exploded as $tag ) { $search .= " AND ( ($wpdb->posts.post_title LIKE '%$tag%') OR ($wpdb->posts.post_excerpt LIKE '%$tag%') OR EXISTS ( SELECT * FROM $wpdb->postmeta WHERE post_ID = pl_posts.ID AND meta_key = '--KEY--' AND meta_value LIKE '%$tag%' ) )"; } return $search; } 

pre_get_posts принимает только один параметр, но вы, кажется, используете его, как если бы это были posts_where . Это не работает pre_get_posts . Вы должны изменить передаваемый в него объект $query , а не создавать и возвращать предложение SQL .

Мне нелегко это проверить, но я думаю, что вам нужен хук, либо posts_where либо фильтр posts_search который логически имеет смысл.

 add_action('posts_where', '__adapted_search_function',1,2); 

Или

 add_action('posts_search', '__adapted_search_function',1,2); 

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