Теперь представьте, что вы не хотите давать пользователю своего плагина возможность изменять метаданные сообщений через неаккуратный и пользовательский недружественные метаданные полей. И поэтому вы создаете настраиваемый мета-поле и префикс своего мета-ключа с подчеркиванием/_
. Затем пользователь меняет свой разум и деактивирует или удаляет ваш плагин. Что происходит сейчас, так это то, что пользователь имеет точно никакого доступа к любому пользовательскому интерфейсу для изменения (все еще присутствующих) метаданных. Это действительно очень плохая ситуация для пользователя.
Поэтому нам нужен переключатель отключить Пользовательские поля 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
. Иначе я бы никогда не наткнулся на это.
Благодарим вас за ответ. – Benmay
Благодарим вас за ответ. Эти швы работают. Но нет ли другой возможности для этой проблемы? Я видел темы, где не используются «is_protected_meta» или подчеркивание для ключей, а метаданные не отображаются в пользовательских полях. – Benmay
Я не знаю никакой другой возможности, кроме этих двух. Я также быстро просмотрел источник Wordpress, который отображает метабокс «Пользовательские поля» и не нашел никаких дополнительных возможностей. Вы можете попытаться использовать параметры WordPress вместо метафайла, но это настоятельно не рекомендуется. Я действительно не знаю, как это можно реализовать в таких темах без этих возможностей, нужно увидеть код темы =) – hadvig