Значения метаданных WordPress отображаются в настраиваемых полях

Я добавил мета-поля в свои сообщения, используя действие « 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 в своем блоге. Иначе я бы никогда не наткнулся на это.