Для создания поиска по мета-полю в обычном поиске в админ-панели 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');
Разберем этот код:
1. Мы определяем функцию custom_admin_search_filter
, которая будет использоваться в качестве фильтра для изменения запроса поиска.
2. Мы используем глобальные переменные $pagenow
и $wpdb
для проверки, находимся ли мы на странице админ-панели WordPress и для работы с базой данных WordPress соответственно.
3. Мы проверяем, является ли текущая страница админ-панели редактированием сообщений/страниц и был ли введен поисковый запрос ($_GET['s']
).
4. Если пользователь ввел поисковый запрос и строка запроса содержит meta_key:
, мы разбиваем строку запроса на массив используя разделитель :
.
5. Мы извлекаем meta_key
и meta_value
из этого массива.
6. Затем мы проверяем, существует ли мета-поле с помощью функции metadata_exists()
.
7. Если мета-поле существует, мы изменяем запрос поиска, чтобы добавить условие мета-поля. Мы устанавливаем значения 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
.