是否对作者隐藏自定义帖子类型字段?

时间:2012-11-16 作者:Dan Romanchik

对于一个商业协会网站,我使用自定义帖子类型构建了一个会员数据库。企业注册一个在线表单,该表单为该企业创建一个自定义帖子,当管理员收到新成员的会费时,她会为该企业创建一个WordPress用户,并使该用户成为帖子的作者。这样,企业就可以在必要时更新企业信息。

问题是,此方案允许企业也更新一些他们确实无法更新的字段,例如到期日期。因此,我想做的是隐藏这些字段,或者在作者编辑帖子时使其不可编辑,但在WP管理员编辑帖子时使其可编辑。

有人知道怎么做吗?

1 个回复
SO网友:chrisguitarguy

最简单的方法是使用current_user_can 显示字段之前。

例如,管理员角色具有以下功能manage_options 您新创建的用户将不会拥有这些功能。所以你可以这样做:

<?php
// wherever your fields are...
if(current_user_can(\'manage_options\'))
{
   // display your fields here.
}
或者,如果您不想在自定义帖子类型的页面上显示整个元框,则可以在添加之前检查其功能。

<?php
add_action(\'add_meta_boxes_{YOUR_POST_TYPE}\', \'wpse72883_add_box\');
function wpse72883_add_box()
{
    if(!current_user_can(\'manage_options\'))
        return; // current user isn\'t an admin, bail

    // add the meta box here
}
添加您自己的检查功能(而不是使用内置功能)可能也很有用。将管理员角色授予edit_business_details...

<?php
$role = get_role(\'administrator\');
if($role)
    $role->add_cap(\'edit_business_details\');
这只需要发生一次——例如在插件激活时。

<?php
// some plugin file.
register_activation_hook(__FILE__, \'wpse72883_activate\');
function wpse72883_activate()
{
    $role = get_role(\'administrator\');
    if($role)
        $role->add_cap(\'edit_business_details\');
}
然后,您可以检查该功能,就像manage_options.

<?php
// wherever your fields are...
if(current_user_can(\'edit_business_details\'))
{
   // display your fields here.
}

结束

相关推荐