【问题标题】:Wordpress User Role allow acces only to Contact Form 7Wordpress 用户角色只允许访问联系表 7
【发布时间】:2019-03-28 17:25:15
【问题描述】:

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

不对,它无权访问帖子。它具有查看联系表单的权限,但没有编辑权限。

【问题讨论】:

    标签: php wordpress contact-form-7


    【解决方案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');
    }
    

    【讨论】:

      【解决方案2】:

      看看这个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' );
      

      【讨论】:

      • 这在 CF7 v5.2.1 中仍然适用,publish_pages 上限需要 wpcf7_edit_contact_forms 才能工作。
      【解决方案3】:

      CF7 插件是在 WordPress 的初始阶段编写的,在框架成熟其仪表板集成核心代码之前,因此,插件作者创建了许多扩展管理类的管理页面,以集成表单编辑器页面. WordPress 核心代码发展到如今存在用于仪表板中插件集成的标准机制,以便利用管理界面中已经内置的许多功能,而 CF7 插件代码将其遗留代码保留到指出许多现有的核心功能不适用于 CF7 插件。比如adding custom columns到表格列表。

      CF7 表单存储为自定义帖子类型wpcf7_contact_form,但是,表格列表和编辑器页面都是自定义管理页面(分别与edit.php 和 post.php 相对)。在 CF7 插件上使用 WP 核心标准功能将始终是一个挑战。正是这个原因让我开发了一个插件扩展,将 CF7 插件带回 WP 核心标准。我写了Smart Grid-Layout design Extension,以便能够通过创建一个集成了 UI 设计器的新表单编辑器来创建响应式网格布局表单。因此,表格列表和表单编辑器页面现在是 WP 核心页面,它们利用了框架的全部功能。

      使用此扩展,可以通过defining a new roleadding 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)
          );
      }
      

      【讨论】:

        【解决方案4】:

        刚看到这个并应用了一个技巧。我为所有用户期望 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' );
        

        【讨论】:

          猜你喜欢
          • 2020-09-07
          • 1970-01-01
          • 1970-01-01
          • 2017-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-07
          • 1970-01-01
          相关资源
          最近更新 更多