Для создания поиска по мета-полю в обычном поиске в админ-панели WordPress, вам потребуется использовать фильтры, чтобы изменить запрос поиска.
Прежде всего, вам необходимо добавить код в файл functions.php вашей темы или в файл плагина для создания нового фильтра:
function custom_admin_search_filter($query) { global $pagenow; global $wpdb; // Убедитесь, что вы применяете фильтр только на странице админ-панели WordPress if (is_admin() && $pagenow == 'edit.php' && isset($_GET['s']) && $_GET['s'] != '') { // Получить поисковый запрос $search_term = $_GET['s']; // Проверить, является ли запрос поиска по мета-полю if (strpos($search_term, 'meta_key:') !== false) { // Разделить строку поиска по мета-полю на массив $search_parts = explode(':', $search_term); // Получить meta_key и meta_value $meta_key = $search_parts[1]; $meta_value = $search_parts[2]; // Проверить, существует ли мета-поле if (metadata_exists('post', $meta_key)) { // Изменить запрос поиска, чтобы добавить условие мета-поля $query->query_vars['meta_key'] = $meta_key; $query->query_vars['meta_value'] = $meta_value; $query->query_vars['meta_compare'] = '='; } } } } add_filter('pre_get_posts', 'custom_admin_search_filter');
Разберем этот код:
- Мы определяем функцию
custom_admin_search_filter
, которая будет использоваться в качестве фильтра для изменения запроса поиска. - Мы используем глобальные переменные
$pagenow
и$wpdb
для проверки, находимся ли мы на странице админ-панели WordPress и для работы с базой данных WordPress соответственно. - Мы проверяем, является ли текущая страница админ-панели редактированием сообщений/страниц и был ли введен поисковый запрос (
$_GET['s']
). - Если пользователь ввел поисковый запрос и строка запроса содержит
meta_key:
, мы разбиваем строку запроса на массив используя разделитель:
. - Мы извлекаем
meta_key
иmeta_value
из этого массива. - Затем мы проверяем, существует ли мета-поле с помощью функции
metadata_exists()
. - Если мета-поле существует, мы изменяем запрос поиска, чтобы добавить условие мета-поля. Мы устанавливаем значения
meta_key
,meta_value
иmeta_compare
в соответствующие свойства объекта$query->query_vars
.
Этот код позволит добавить фильтр по мета-полю в обычный поиск в админ-панели WordPress. Просто введите в строке поиска meta_key:your_meta_key:your_meta_value
, где your_meta_key
и your_meta_value
- это значения вашего мета-поля.
Например, если вы хотите искать все сообщения со значением мета-поля author
равным John
, вам нужно будет ввести в строке поиска meta_key:author:John
.
Обратите внимание, что этот код работает только на странице редактирования сообщений/страниц в админ-панели WordPress. Если вы хотите применить это на других страницах админ-панели, вам потребуется изменить условие $pagenow
в функции custom_admin_search_filter
.