对于一个商业协会网站,我使用自定义帖子类型构建了一个会员数据库。企业注册一个在线表单,该表单为该企业创建一个自定义帖子,当管理员收到新成员的会费时,她会为该企业创建一个WordPress用户,并使该用户成为帖子的作者。这样,企业就可以在必要时更新企业信息。
问题是,此方案允许企业也更新一些他们确实无法更新的字段,例如到期日期。因此,我想做的是隐藏这些字段,或者在作者编辑帖子时使其不可编辑,但在WP管理员编辑帖子时使其可编辑。
有人知道怎么做吗?
对于一个商业协会网站,我使用自定义帖子类型构建了一个会员数据库。企业注册一个在线表单,该表单为该企业创建一个自定义帖子,当管理员收到新成员的会费时,她会为该企业创建一个WordPress用户,并使该用户成为帖子的作者。这样,企业就可以在必要时更新企业信息。
问题是,此方案允许企业也更新一些他们确实无法更新的字段,例如到期日期。因此,我想做的是隐藏这些字段,或者在作者编辑帖子时使其不可编辑,但在WP管理员编辑帖子时使其可编辑。
有人知道怎么做吗?
最简单的方法是使用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.
}