Я добавил мета-поля в свои сообщения, используя действие « add_meta_boxes
» для добавления / изменения пользовательских настроек, таких как background-color и т. Д.
Когда я включаю пользовательские поля в параметры моего экрана, все значения моих мета-полей отображаются в этих настраиваемых полях!
Кроме того, в selectbox также появляется новое «настраиваемое поле».
Если вы хотите скрыть свои метаданные сообщения из настраиваемых полей metabox, вы должны запустить свои мета-ключи с помощью подчеркивания. Пример _background-color
Добавлено:
Также вы можете использовать фильтр is_protected_meta
, возвращающий логическое значение ( true - hide, false - show
).
Параметры фильтра: $protected, $meta_key
. См. Файл wp-includes/meta.php
. функция is_protected_meta()
Обычно WP скрывает мета-ключи, которые начинаются с символа подчеркивания / _
из поля «Пользовательские поля» (по умолчанию / ядро) MetaBox.
Теперь представьте, что вы не хотите, чтобы пользователь вашего плагина имел возможность изменять Post Meta Data через мета-окно с некрасивым и недружественным пользовательским полем. И поэтому вы создаете настраиваемый мета-поле и префикс своего мета-ключа с подчеркиванием / _
. Затем пользователь меняет свой разум и деактивирует или удаляет ваш плагин. Теперь происходит то, что пользователь не имеет никакого доступа к любому пользовательскому интерфейсу для изменения (все еще присутствующих) метаданных. Это действительно очень плохая ситуация для пользователя.
Таким образом, нам нужен переключатель, чтобы отключить доступ к пользовательским полям 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
для деактивации $auth_callback
к пользовательским полям MetaBox, пока активен ваш плагин. Когда пользователь удаляет или отключает ваш плагин, он мгновенно получает доступ к мета-полю через стандартные пользовательские поля MetaBox .
Примечания: Ядро WP в версии 4.0.0 при написании этого вопроса. Используйте $sanitize_callback
! Спасибо Trepmal за сообщение об фильтре is_protected_meta
в своем блоге. Иначе я бы никогда не наткнулся на это.