Intereting Posts
Удаление rel = "nofollow" из ссылок, размещенных в Post Content Порядок работы для этих трех крючков Показать флаг страны в профиле WordPress / Buddypress Удаление метаданных Featured Image Как избежать <div> и <ul>, которые добавляются при использовании виджета custon menu Запрос wpdb php get_var для получения идентификатора для URL-изображения не работает для ID более 999 недостаточные разрешения; кодирование действия для плагина, управляемое пользовательскими возможностями Как спам-фильтр настраиваемого типа контента с помощью плагина Akismet? Как удалить 20 ГБ изображений с измененным размером? Вывести the_title () внутри the_content () Если сообщение существует, сделайте комментарий в существующей почте с тем же именем? Как ifttt.com аутентифицирует предоставленную учетную запись WordPress Переопределение wp_get_archives () apply_filters () Как я могу добавить разбивку на страницы и как изменить размер эскизов? Как добавить настройки на страницу параметров фона?

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

У меня есть код подзаголовка в моем файле 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); 

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