fxfuture
  • 0
Новичок

Разрешить пользователю редактировать сообщения, но не добавлять новые?

  • 0

Для одного из моих настраиваемых типов сообщений я хочу, чтобы конкретный пользователь мог редактировать существующие сообщения, созданные администратором, но не мог добавлять новые сообщения.

Как это может быть сделано?

Если я определяю роль пользователя как неспособную к публикации, она по-прежнему позволяет им добавлять новую публикацию и отправлять ее на рассмотрение.

Share
  1. Вам нужно будет сделать что-то вроде этого:

    function hide_buttons() {
        global $current_screen;
    
        if($current_screen->id == 'edit-post' && !current_user_can('publish_posts')) {
            echo '<style>.add-new-h2{display: none;}</style>';  
        }
    }
    add_action('admin_head','hide_buttons');
    

    См.: http://erisds.co.uk/wordpress/spotlight-wordpress-admin-menu-remove-add-new-pages-or-posts-link для справки.

    • 0
  2. Предыдущий ответ только скрывает пункт меню с помощью CSS, и, как указывает @ezejielDFM, это не помешает пользователям фактически добавлять сообщения.

    Вместо этого при регистрации пользовательского типа сообщения вам необходимо установить create_posts значение do_not_allow (или false в версиях WordPress ниже 4.5) и, что крайне важно, установить map_meta_cap значение true .

    register_post_type( 'custom_post_type_name', array(
        'capability_type' => 'post',
            'capabilities' => array(
            'create_posts' => 'do_not_allow', // Prior to WordPress 4.5, this was false
        ),
        'map_meta_cap' => true, //  With this set to true, users will still be able to edit & delete posts
    ));
    

    Если не указано map_meta_cap, по умолчанию используется значение, false и, хотя вы отключили возможность добавления новых сообщений, вы также не сможете редактировать или удалять существующие, поэтому обязательно включите это значение.

    Полная заслуга принадлежит этому ответу о переполнении стека.

    • 0

Оставить ответ

You must login to add an answer.