我有一个自定义用户角色,称为form_editor。我希望该用户只能编辑联系表单7。
这是我到目前为止所拥有的
$form_editor_role = add_role(
'form_editor',
__( 'Form Editor' ),
array(
'read' => true, // true allows this capability
'edit_posts' => true,
'delete_posts' => false, // Use false to explicitly deny
)
);
$role = get_role( 'form_editor' );
if(!$role->has_cap('cfdb7_access')){
$role->add_cap( 'cfdb7_access' );
}
对吧,它无权访问帖子。它具有查看联系表的权限,但没有编辑权限。
答案 0 :(得分:0)
尝试添加publish_pages
并添加remove_role('form_editor');
以刷新当前角色
remove_role('form_editor');
add_role('form_editor', __('Form Editor'), array(
'read' => true, // true allows this capability
'edit_posts' => true,
'delete_posts' => false, // Use false to explicitly deny
'publish_pages' => true
));
$role = get_role('form_editor');
if (!$role->has_cap('cfdb7_access')) {
role->add_cap('cfdb7_access');
}
答案 1 :(得分:0)
看看这个link。 Contact Form 7使用内置的用户功能
wpcf7_edit_contact_form => publish_pages
wpcf7_edit_contact_forms => publish_pages
wpcf7_read_contact_forms => edit_posts
wpcf7_delete_contact_form => publish_pages
wpcf7_manage_integration => manage_options
要获得编辑权限,您应该像这样为新角色赋予publish_pages
功能:
$role = get_role( 'form_editor' );
$role->add_cap( 'publish_pages' );
答案 2 :(得分:0)
CF7插件是在WordPress的初始阶段编写的,在框架使其仪表板集成核心代码成熟之前,因此,插件作者创建了许多扩展管理类的管理页面,以集成表单编辑器页面。 。 WordPress核心代码已发展到今天,在仪表板中存在用于插件集成的标准机制,以便利用已经内置在管理界面中的许多功能,而CF7插件代码将其原有代码保留到了指出许多现有的核心功能不适用于CF7插件。例如adding custom columns到表单表列表。
CF7表单存储为自定义帖子类型wpcf7_contact_form
,但是表列表和编辑器页面都是自定义管理页面(分别与edit.php
和post.php相对)。在CF插件上使用WP核心标准功能始终是一个挑战。正是这个原因导致我开发了一个插件扩展,以将CF7插件带回到WP核心标准中。我编写了Smart Grid-Layout design Extension,以便能够通过创建一个集成了UI设计器的新表单编辑器来创建响应式网格布局表单。因此,表列表和表单编辑器页面现在是WP核心页面,它们利用了框架的全部功能。
使用此扩展名,可以通过defining a new role或adding additional capabilities to an existing role使用WordPress功能来实现对用户角色访问的微调。允许您控制访问权限的CF7功能是
'edit_posts' => 'wpcf7_edit_contact_forms'; //controls access to form table
'edit_others_posts' => 'wpcf7_edit_others_contact_forms'; //controls access to forms created by other users.
'edit_published_posts' => 'wpcf7_edit_published_contact_forms'; //ability to edit published forms.
'delete_posts' => 'wpcf7_delete_contact_forms'; //delete forms.
'delete_published_posts' => 'wpcf7_delete_published_contact_forms'; //delete published forms.
'delete_others_posts' => 'wpcf7_delete_others_contact_forms'; //delete forms created by other users.
'publish_posts' => 'wpcf7_publish_contact_forms'; //publish forms, else status are set as pending.
例如,为表单编辑器创建一个新角色,
add_action('init', 'create_cf7editor_role');
function create_cf7editor_role(){
add_role('cf7_editor', 'Form Editor',
array('wpcf7_edit_contact_forms'=>1,
'wpcf7_edit_others_contact_forms'=>1,
'wpcf7_edit_published_contact_forms'=>1,
'wpcf7_read_contact_forms'=>1,
'wpcf7_publish_contact_forms'=>1,
'wpcf7_delete_contact_forms'=>1,
'wpcf7_delete_published_contact_forms'=>1,
'wpcf7_delete_others_contact_forms'=>1)
);
}
答案 3 :(得分:0)
刚看到这个并应用了一个技巧。我为所有用户禁用了联系表单选项,希望 form_editor。会好吗。
function remove_menu_pages() {
//global $user_ID;
if( is_user_logged_in() ) {
$user = wp_get_current_user();
$roles = ( array ) $user->roles;
if($roles[0]!='form_editor')
{
remove_menu_page('wpcf7');
}
}
}
add_action( 'admin_init', 'remove_menu_pages' );