2012-02-24 2 views
2

я добавил мета коробки на мои сообщения с помощью действия «add_meta_boxes», чтобы добавить/изменить пользовательские настройки, такие как цвет фона и т.д.Wordpress мета значения окно отображения пользовательских полей

Когда я включаю пользовательские поля мои параметры экрана, все значения моих мета-полей отображаются в этих настраиваемых полях!

В поле выбора также отображаются новые «пользовательские поля».

ответ

3

Если вы хотите скрыть свои метаданные сообщения из пользовательских полей metabox, вы должны запустить свои мета-ключи с помощью подчеркивания. Пример _background-color

Добавлено:

Также вы можете использовать is_protected_meta фильтр, который возвращать логическое значение (true - hide, false - show).

Параметры фильтра: $protected, $meta_key. См. Файл wp-includes/meta.php. Функция is_protected_meta()

+0

Благодарим вас за ответ. – Benmay

+0

Благодарим вас за ответ. Эти швы работают. Но нет ли другой возможности для этой проблемы? Я видел темы, где не используются «is_protected_meta» или подчеркивание для ключей, а метаданные не отображаются в пользовательских полях. – Benmay

+0

Я не знаю никакой другой возможности, кроме этих двух. Я также быстро просмотрел источник Wordpress, который отображает метабокс «Пользовательские поля» и не нашел никаких дополнительных возможностей. Вы можете попытаться использовать параметры WordPress вместо метафайла, но это настоятельно не рекомендуется. Я действительно не знаю, как это можно реализовать в таких темах без этих возможностей, нужно увидеть код темы =) – hadvig

1

Обычно WP скрывает мета ключи, которые начинаются с символа подчеркивания/_ от (по умолчанию/ядро) METABOX настраиваемых полей.

Теперь представьте, что вы не хотите давать пользователю своего плагина возможность изменять метаданные сообщений через неаккуратный и пользовательский недружественные метаданные полей. И поэтому вы создаете настраиваемый мета-поле и префикс своего мета-ключа с подчеркиванием/_. Затем пользователь меняет свой разум и деактивирует или удаляет ваш плагин. Что происходит сейчас, так это то, что пользователь имеет точно никакого доступа к любому пользовательскому интерфейсу для изменения (все еще присутствующих) метаданных. Это действительно очень плохая ситуация для пользователя.

Поэтому нам нужен переключатель отключить Пользовательские поля METABOX доступ в тех пор, пока ваш плагин активирован. Поэтому WP Core получил функцию is_protected_meta(). Она в основном состоит из двух строк кода:

$protected = ('_' == $meta_key[0]); 
return apply_filters('is_protected_meta', $protected, $meta_key, $meta_type); 

Как это не приятно предложить только фильтр для обработки, что WordPress сегодня имеет простую функцию, которую можно использовать:

register_meta($meta_type, $key, $sanitize_callback, $auth_callback); 

а также последний аргумент, то $auth_callback выполняет следующие действия внутри этой функции:

if (empty($auth_callback)) { 
    if (is_protected_meta($meta_key, $meta_type)) 
     $auth_callback = '__return_false'; 
    else 
     $auth_callback = '__return_true'; 
} 

if (is_callable($auth_callback)) 
    add_filter("auth_{$meta_type}_meta_{$meta_key}", $auth_callback, 10, 6); 

Как вы можете видеть, вы просто хотите добавить '__return_false' в $auth_callback до деактивировать пользовательские поля Доступ MetaBox до тех пор, пока ваш плагин активен. Когда пользователь удаляет или деактивирует ваш плагин, он мгновенно получает доступ к мета-полю через стандартный Пользовательские поля MetaBox.


Примечания: Ядро WP в версии 4.0 при написании этого вопроса. Используйте $sanitize_callback! Спасибо Trepmal за размещение в блоге фильтра is_protected_meta. Иначе я бы никогда не наткнулся на это.

Смежные вопросы