Поиск по содержимому пользовательского поля ИЛИ идентификатору записи через панель управления WordPress.

Вопрос или проблема

Этот код хорошо работает для поиска по содержимому пользовательских полей, но не мог бы кто-нибудь помочь мне изменить его, чтобы я мог искать по идентификатору поста, вместо одного из трех пользовательских полей? Я всегда буду искать только один из 4 возможных вариантов, никогда не несколько.

add_action( 'pre_get_posts', 'extend_admin_search' );
function extend_admin_search( $query ) {
$post_type="properties";
$custom_fields = array("custom_field_one","custom_field_two","custom_field_three",);
if( ! is_admin() )
    return;
if ( $query->query['post_type'] != $post_type )
    return;
$search_term = $query->query_vars['s'];

$query->query_vars['s'] = '';

if ( $search_term != '' ) {
    $meta_query = array( 'relation' => 'OR' );
    foreach( $custom_fields as $custom_field ) {
        array_push( $meta_query, array(
            'key' => $custom_field,
            'value' => $search_term,
            'compare' => 'LIKE'
        ));
    }
    $query->set( 'meta_query', $meta_query );
};

}

Я разобрался сам – просто добавьте второй фрагмент кода!

Я получил следующее из Как искать пользовательские посты по ID в панели управления WordPress на Codexin

/**
 * Добавить поиск пользовательских постов по их ID в панели управления WordPress
 *
 */
add_action( 'parse_request', 'cdxn_search_by_id' );
function cdxn_search_by_id( $wp ) {
    global $pagenow;

    if( !is_admin() && 'edit.php' != $pagenow && 'students' !== $_GET['post_type']) {
        return;
    }

    // Если это не поиск, вернуть
    if( !isset( $wp->query_vars['s'] ) ) {
        return;
    }

    // Проверить числовое значение
    $id = absint( substr( $wp->query_vars['s'], 0 ) );
    if( !$id ) {
        return; 
    }

    unset( $wp->query_vars['s'] );
    $wp->query_vars['p'] = $id;
}

Ответ или решение

Поиск по пользовательскому полю или ID записи в панели управления WordPress

Когда речь идет о поиске записей в WordPress, необходимо учесть несколько нюансов, особенно если вы хотите производить поиск как по пользовательским полям, так и по ID записи. В этой статье мы обсудим, как расширить стандартные возможности поиска в административной панели WordPress, чтобы иметь возможность осуществлять поиск как по содержимому пользовательских полей, так и по ID постов.

Расширение функции поиска

Для начала вы должны уже иметь функционал, который позволяет искать по пользовательским полям. У вас есть следующий код:

add_action( 'pre_get_posts', 'extend_admin_search' );
function extend_admin_search( $query ) {
    $post_type = "properties";
    $custom_fields = array("custom_field_one", "custom_field_two", "custom_field_three");

    if ( !is_admin() )
        return;

    if ( $query->query['post_type'] != $post_type )
        return;

    $search_term = $query->query_vars['s'];
    $query->query_vars['s'] = '';

    if ( $search_term != '' ) {
        $meta_query = array('relation' => 'OR');
        foreach( $custom_fields as $custom_field ) {
            array_push($meta_query, array(
                'key' => $custom_field,
                'value' => $search_term,
                'compare' => 'LIKE'
            ));
        }
        $query->set('meta_query', $meta_query);
    }
}

Этот код работает хорошо для поиска по пользовательским полям. Для добавления функции поиска по ID записи мы добавим следующий фрагмент кода.

Код для поиска по ID записи

Добавьте следующий код в файл functions.php вашей темы:

add_action('parse_request', 'cdxn_search_by_id');
function cdxn_search_by_id($wp) {
    global $pagenow;

    if (!is_admin() && 'edit.php' != $pagenow) {
        return;
    }

    // Проверка наличия поискового запроса
    if (!isset($wp->query_vars['s'])) {
        return;
    }

    // Преобразование поискового термина в число
    $id = absint(substr($wp->query_vars['s'], 0));
    if (!$id) {
        return;
    }

    // Удаление поискового термина и установка ID
    unset($wp->query_vars['s']);
    $wp->query_vars['p'] = $id;
}

Объединение функционала

Теперь у вас есть две части кода, которые позволяют осуществлять поиск как по пользовательским полям, так и по ID записи. Если вы хотите выполнить поиск, просто введите ID записи в строке поиска, и вы получите соответствующий результат. Если же вы введете строку, которая соответствует содержимому одного из указанных пользовательских полей, поисковая система также выдаст результаты.

Рекомендации и предупреждения

  1. Тестирование: Перед развертыванием данной функциональности на основном сайте рекомендуется провести тестирование на локальном или тестовом сервере.

  2. Оптимизация: Убедитесь, что у вас оптимизированы пользовательские поля, чтобы избежать избыточных запросов к базе данных.

  3. Безопасность: Следите за безопасностью при работе с пользовательскими вводами. Всегда проверяйте и фильтруйте данные перед их использованием в запросах к базе данных.

Заключение

С помощью вышеописанного подхода вы сможете расширить функционал поиска в административной панели WordPress, что значительно улучшит управление контентом на вашем сайте. Это особенно полезно для больших баз данных, где стандартные методы поиска могут быть неэффективны. Используйте данные рекомендации, чтобы вынести работу с пользовательскими полями и ID записей на новый уровень.

Оцените материал
Добавить комментарий

Капча загружается...