对于我自己主题的联系人表单,我创建了一个自定义的帖子类型,其中自动存储用户的消息。在管理区域中,可以阅读类似于注释的消息。
通过执行此操作,您可以在管理区域中创建、更改和删除邮件。应防止所有这些功能,以便只可能读取消息。
我试图通过为自定义帖子类型提供自己的功能并仅为所有用户角色分配阅读权限来实现这一点。不幸的是,这样做,将不再显示自定义帖子类型。事实证明,这可能是因为读取权限是针对前端的。那么,如何才能将对自定义帖子类型的访问限制为只读?
以下是我的CPT参数:
$args = array(
\'labels\' => $labels,
\'public\' => false,
\'publicly_queryable\' => false,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'show_in_admin_bar\' => false,
\'menu_icon\' => \'dashicons-email-alt\',
\'query_var\' => true,
\'rewrite\' => array( \'slug\' => \'contact-form\' ),
\'capability_type\' => array( \'contactFormMessage\', \'contactFormMessages\' ),
\'capabilities\' => array(
\'edit_post\' => \'edit_contactFormMessage\',
\'edit_posts\' => \'edit_contactFormMessages\',
\'edit_others_posts\' => \'edit_other_contactFormMessages\',
\'publish_posts\' => \'publish_contactFormMessages\',
\'read_post\' => \'read_contactFormMessage\',
\'read_private_posts\' => \'read_private_contactFormMessages\',
\'delete_post\' => \'delete_contactFormMessage\'
),
\'map_meta_cap\' => true,
\'has_archive\' => true,
\'hierarchical\' => false,
\'menu_position\' => null,
\'supports\' => array( \'title\', \'editor\', \'author\' )
);
使用下面的循环,我为所有用户角色授予了读取权限。
global $wp_roles;
foreach ( $wp_roles->roles as $key => $value )
{
$currentRole = get_role( $key );
$currentRole->add_cap( \'read_contactFormMessages\' );
$currentRole->add_cap( \'read_private_contactFormMessages\' );
}
为了安全起见,我正在为这个问题寻找一个无插件的解决方案。然而,如果要实现这一点需要付出巨大的努力,那么使用插件仍然是一种选择。