WordPress用户角色仅允许访问联系表单7。

7
我是一位有用的助手,可以帮您进行文本翻译。以下是您需要翻译的内容:

我有一个自定义用户角色,名为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' );
}

目前它无法访问帖子。它可以查看联系表单,但没有编辑权限。

4个回答

1

尝试添加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');
}

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' );

0

看一下这个链接。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' );

截至CF7 v5.2.1,这仍然是正确的,wpcf7_edit_contact_forms需要publish_pages权限才能工作。 - farinspace

0
CF7插件是在WordPress的初期阶段编写的,在框架成熟其仪表板集成核心代码之前,插件作者创建了许多管理页面,以扩展管理类,以便集成表单编辑器页面。WordPress核心代码发展到今天,已经存在一种标准机制,用于插件在仪表板中的集成,以利用已经构建到管理界面中的许多功能,而CF7插件代码保持其遗留代码,以至于许多现有的核心功能不适用于CF7插件。例如向表单表格列表添加自定义列
CF7表单存储为自定义文章类型wpcf7_contact_form,但表格列表和编辑器页面都是自定义管理页面(而不是edit.php和post.php)。让WP核心标准功能在CF7插件上工作将始终是一个挑战。正是这个原因促使我开发了一个插件扩展,将CF7插件带回到WP核心标准中。我编写了智能网格布局设计扩展, 以便通过创建一个集成UI设计师的新表单编辑器来创建响应式网格布局表单。因此,表格列表和表单编辑器页面现在是WP核心页面,利用了框架的完整功能。
使用此扩展,可以通过使用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)
    );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接