Как сделать поиск по мета-полю в обычном поиске в админ-панели WordPress?

Для создания поиска по мета-полю в обычном поиске в админ-панели 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.