Как удалить пользовательское поле “предложения” из выпадающего списка

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

Когда вы используете стандартное произвольное поле в WP, вам нужно написать название произвольного поля в первый раз.

Во второй раз, когда вы используете произвольное поле, оно добавляется в выпадающий список произвольных полей. Но иногда, когда вы устанавливаете плагины, они используют МНОГО произвольных полей.

Этот список становится довольно длинным, и некоторые из моих произвольных полей могут “выпадать” из списка. Итак, кто-нибудь знает, как я могу удалить произвольные поля из своего выпадающего списка простым способом?

Вы можете отфильтровать запрос для этих ключей на 'query'. Я бы начал этот фильтр как можно позже, чтобы избежать побочных эффектов.

Пример кода, протестировано:

add_filter( 'postmeta_form_limit', 'wpse_73543_hide_meta_start' );

function wpse_73543_hide_meta_start( $num )
{
    add_filter( 'query', 'wpse_73543_hide_meta_filter' );

    return $num;
}

function wpse_73543_hide_meta_filter( $query )
{
    // Защитить дальнейшие запросы.
    remove_filter( current_filter(), __FUNCTION__ );

    $forbidden = array ( 'the', 'keys', 'you', 'want', 'to', 'hide' );
    $where     = "WHERE meta_key NOT IN('" . join( "', '", $forbidden ) . "') ";
    $find      = "GROUP BY";
    $query     = str_replace( $find, "$where\n$find", $query );

    return $query;
}

Не существует способа отфильтровать то, что там появляется, вы можете увидеть, где он запрашивает ключи и отображает это поле в функции meta_form() в wp-admin/includes/template.php, однако вы можете заметить, что он игнорирует любой ключ, начинающийся с подчеркивания:

HAVING meta_key NOT LIKE '\_%'

это то, что плагины должны делать с любыми мета-ключами, которые они создают, чтобы скрыть эти ключи из меню.

Вы также увидите фильтр postmeta_form_limit, который по умолчанию установлен на 30. Вы можете увеличить это число, чтобы ваши ключи как минимум были включены в список и не выпадали из него.

Другой вариант — создать свой собственный мета-блок для управления конкретными мета-данными, вместо того чтобы использовать мета-блок произвольных полей.

Для WP = 6.6.1 решение, (предложенное выше), требует небольших модификаций. Поскольку запрос по умолчанию, отправляемый в эту функцию в параметре query, выглядит следующим образом:

SELECT DISTINCT meta_key
FROM wp_postmeta
WHERE meta_key NOT BETWEEN '_' AND '_z'
HAVING meta_key NOT LIKE '\\_%'
ORDER BY meta_key
LIMIT 30

Для того чтобы фильтрация работала, вам нужно изменить функцию следующим образом (параметр $find и функцию str_replace):

function wpse_73543_hide_meta_filter( $query )
{
    // Защитить дальнейшие запросы.
    remove_filter( current_filter(), __FUNCTION__ );

    $forbidden = array ( 'the', 'keys', 'you', 'want', 'to', 'hide' );
    $where     = "WHERE meta_key NOT IN('" . join( "', '", $forbidden ) . "') ";
    $find      = "WHERE";
    $query     = str_replace( $find, "$where\n AND", $query );

    return $query;
}

И запрос будет выглядеть так:

SELECT DISTINCT meta_key
FROM wp_postmeta
WHERE meta_key NOT IN('the', 'keys', 'you', 'want', 'to', 'hide')
AND meta_key NOT BETWEEN '_' AND '_z'
HAVING meta_key NOT LIKE '\\_%'
ORDER BY meta_key
LIMIT 30

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

Удаление пользовательских полей из выпадающего списка в WordPress

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

Шаги для удаления пользовательских полей

  1. Добавление фильтра postmeta_form_limit: Чтобы скрыть определенные ключи метаданных, можно использовать фильтр postmeta_form_limit. Этот фильтр позволяет изменить запрос, который используется для получения значений пользовательских полей.

  2. Создание функции для фильтрации метаданных: Приведенный ниже код создает функцию, которая будет фильтровать пользовательские поля, исключая заданные ключи из выпадающего списка.

    add_filter('postmeta_form_limit', 'custom_hide_meta_fields');
    
    function custom_hide_meta_fields($num) {
       add_filter('query', 'custom_hide_meta_filter');
       return $num;
    }
    
    function custom_hide_meta_filter($query) {
       remove_filter(current_filter(), __FUNCTION__);
    
       $forbidden = array('meta_key_1', 'meta_key_2'); // Замените на ключи, которые нужно скрыть
       $where = "WHERE meta_key NOT IN('" . join("', '", $forbidden) . "')";
       $find = "WHERE";
       $query = str_replace($find, "$where\n AND", $query);
    
       return $query;
    }
  3. Объяснение работы кода:

    • add_filter('postmeta_form_limit', ...);: Этот вызов добавляет фильтр к функции, чтобы мы могли модифицировать процесс запроса полей метаданных.
    • function custom_hide_meta_filter($query): Здесь мы определяем функцию, которая изменяет SQL-запрос, исключая заданные поля.
    • $forbidden: Этот массив содержит ключи метаданных, которые мы хотим скрыть. Замените его значениями, соответствующими полям, которые вы хотите удалить из выпадающего списка.

Дополнительные рекомендации

  • Использование префиксов: Если вы разрабатываете собственные плагины или темы, хорошей практикой является использование подчеркивания перед именами метаданных (например, _meta_key_1). Это позволит автоматически скрывать их в выпадающем списке, так как WordPress игнорирует ключи, начинающиеся с подчеркивания.

  • Создание собственного метабокса: Если вам необходимо управлять определенными метаданными более качественно, возможно, имеет смысл создать собственный метабокс. Это позволит вам более гибко контролировать отображение и работу с пользовательскими полями.

  • Увеличение лимита: Если вам необходимо, чтобы больше пользовательских полей отображалось в выпадающем списке, можно изменить значение умолчательного лимита в функции postmeta_form_limit.

Заключение

Удаление пользовательских полей из выпадающего списка в WordPress — это процесс, который можно реализовать с помощью настройки SQL-запросов в PHP-коде. Задействуя указанные выше шаги и рекомендации, вы сможете эффективно управлять пользовательскими полями и улучшить опыт работы с админкой WordPress. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью на специализированные форумы или сообщество разработчиков.

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

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