Intereting Posts
Пользовательские строки для перевода с использованием плагина Polylang Восстановление страниц в wordpress Как добавить категории в пользовательские типы сообщений в WordPress? Нужна консультация о том, как добавлять ссылки на страницу профиля пользователя? Представления форм, не отправляемые в базу данных / отображение на панели управления WordPress с изображением не обновляется (устанавливается с помощью плагина) Проблема форматирования короткого кода и пробелов Несколько областей динамического содержимого на странице Как и когда я буду внедрять некоторый код, который будет принимать данные из одной части Db и помещать их в другую? WP все импорт и WPML, проблема синхронизации с фондом во время работы cron Как я могу протестировать мой проект WordPress localhost с помощью VirtualBoxVM? Использовать плагин несколько раз Получать сообщения о едином таксономии термина пользовательского типа Получить миниатюру сообщения в виде массива Ограничить редактирование / удаление почты на основе идентификатора пользователя и настраиваемого поля

Только названия продуктов WooCommerce

Я спросил об этом раньше и решил его с помощью плагина Relevanssi , однако этот плагин теперь разбивает вещи, поэтому я больше не могу его использовать. Как что-то настолько бесполезное, сделанное так невозможным с помощью woocommerce? AAARG!

Я попытался использовать это решение , но он, похоже, не работал для меня. Я также попытался найти функцию woocommerce product_search и добавить к ней фильтр, но никуда не денутся.

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

наценка

 <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>"> <input type="hidden" name="post_type" value="product" /> <input type="text" value="" name="s" /> <input type="submit" value="Search" /> </form> 

Обратный вызов фильтра Search-SQL

 // Search product titles only. function __search_by_title_only( $search, &$wp_query ) { global $wpdb; if($_GET['post_type'] = 'product' ) return $search; $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 ); 

Кто угодно? Я полагаю, что это имеет какое-то отношение к самому типу почты woocommerce … им нравится вставлять множество пользовательских крючков и т. Д.

Это вопрос на 9 месяцев, но поскольку у меня была такая же проблема и я нашел решение, я пришел сюда, чтобы опубликовать его.

В файле wp-content/plugins/woocommerce/classes/class-wc-query.php функция pre_get_posts( $q ) , WooCommerce определяет в строке 114:

 add_filter( 'posts_where', array( $this, 'search_post_excerpt' ) ); 

Это тот момент, когда WooCommerce испортит ваш запрос!

Функция search_post_excerpt определена прямо в строке 132, и вы можете видеть, что он добавляет выдержку в поисковый запрос.

Итак, у вас есть 2 решения:

Плохой, комментирует линию 114!

 //add_filter( 'posts_where', array( $this, 'search_post_excerpt' ) ); 

Хороший, я не реализовал себя, но должен быть чем-то вроде добавления фильтра в posts_where который запускается после WooCommerce и исправляет его. Или, возможно, удалите фильтр.

Я буду искать лучше для хорошего решения, и я обещаю, что опубликую его здесь. Но плохое решение делает работу довольно хорошо.

Пока ваш плагин выглядит хорошо. Не могли бы вы сбросить окончательную строку SQL и добавить ее в свой вопрос? Также: плагин WC сохраняет все в таблице сообщений как тип сообщения? Если да: добавили ли вы ограничение для поиска только этим типом сообщения? Вам, вероятно, понадобится сделать это в $posts_clauses -filter в статье $clauses['where'] или внутри posts_where -filter. Просто замените post_type = post part своим пользовательским типом сообщения из WC.