我已使用“add_meta_boxes
”操作为帖子添加了元框,以添加/更改自定义设置,例如背景颜色等。
当我在屏幕选项中启用自定义字段时,我的元框的所有值都会显示在这些自定义字段中!
选择框中还会显示添加新的“自定义字段”。
答案 0 :(得分:3)
如果要隐藏自定义字段元数据中的帖子元数据,则应使用下划线启动元键。示例_background-color
添加了:
此外,您可以使用is_protected_meta
过滤器,它返回布尔值(true - hide, false - show
)。
过滤参数:$protected, $meta_key
。请参阅wp-includes/meta.php
文件。函数is_protected_meta()
答案 1 :(得分:1)
通常,WP会隐藏以自定义字段(默认/核心)MetaBox中的下划线/ _
开头的元键。
现在想象一下,您不希望为您的插件用户提供通过丑陋且用户不友好的自定义字段元框更改Post Meta Data的可能性。因此,您构建一个自定义元框,并使用下划线/ _
为元键添加前缀。然后用户改变主意并停用或卸载您的插件。现在发生的是用户完全无法访问任何UI 来更改(仍然存在的)元数据。对于用户来说,这是一个非常非常糟糕的情况。
因此,只要您的插件已激活,我们就需要开关来关闭自定义字段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核心在v4.0.1。利用$sanitize_callback
!感谢Trepmal在她的博客上发布了is_protected_meta
过滤器。否则,我从来没有偶然发现用例。