tomwright
  • 0
Учитель

Есть ли способ (плагин?) разрешить пользователю редактировать только одну страницу?

  • 0

Мы используем WordPress как CMS и очень хотели бы, чтобы у пользователей была «домашняя страница». В идеале им не дали бы испортить весь сайт.

Есть ли простой способ ограничить права пользователей на редактирование одной страницы?

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

Бонусные баллы за автоматическое создание домашней страницы при создании нового пользователя.


ОБНОВЛЕНИЯ: я должен уточнить, что эти страницы должны быть ограничены определенной областью сайта (т.е. всеми дочерними элементами одной и той же страницы). Кроме того, после разговора с некоторыми пользователями кажется, что они сочли бы полезным создавать подстраницы, ответвляющиеся от их домашней страницы.

Share
  1. Базовая установка WordPress, вероятно, не будет делать то, что вы хотите. Вы можете настроить экземпляр с несколькими сайтами и разрешить пользователям иметь свой собственный «дочерний» сайт или использовать что-то вроде BuddyPress или Mingle, у которого есть функция профиля пользователя.

    • 0
  2. Извините за это, но я наткнулся на ответ на форумах WordPress.

    Оказывается, Role Scoper делает это очень хорошо. Лучше всего об этом сказал автор этого поста на форуме:

    Чтобы позволить пользователю редактировать одну конкретную страницу, но не что-либо еще:

    1. Дайте им роль подписчика в WordPress.
    2. Управление > Страницы > Редактировать свою страницу
    3. Разверните вкладку «Редакторы» в разделе «Дополнительные параметры».
    4. Установите флажок без фигурных скобок слева от имени вашего пользователя (если будут созданы дочерние страницы, также установите флажок со скобками {[]}, который назначает роль для всех текущих или будущих дочерних страниц)
    5. Сохранить страницу
    • 0
  3. Я столкнулся с той же ситуацией, что и вы, и я создал собственный тип сообщений с именем «домашняя страница», а также создал плагин «Пределы создания сообщений Bainternet», чтобы ограничить создание каждого типа сообщений для каждого пользователя. Попробуйте http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

    • 0
  4. Плагин User Access Manager сделает это за вас, все остальные подходы слишком сложны. UAM очень прост, настройте группы и назначьте группу своим подстраницам, готово.

    • 0
  5. Я бы использовал диспетчер возможностей или проверил роли и возможности в кодексе, чтобы сделать это.

    • 0
  6. Решение подразумевает, что вы отключили редактирование «обычных» типов записей (запись, страница).

    Это не так сложно, как вы могли бы поверить. Ключ — это имя пользователя для входа. То же самое можно сделать с таксономиями или даже с терминами.

    См. следующее (также есть пример для запроса):

    // 1st: Add a post type for that user with it's 
    //   user login & according capabilities 
    function create_user_home() {
        global $current_user;
        get_currentuserinfo();
    
        register_post_type(
            'home_of_'.$current_user->user_login,
            array(
                'public' => true,
                'capability_type' => $current_user->user_login,
                'capabilities' => array(
                    'publish_posts' => 'publish_'.$current_user->user_login,
                    'edit_posts' => 'edit_'.$current_user->user_login,
                    'edit_others_posts' => 'edit_'.$current_user->user_login,
                    'delete_posts' => 'delete_'.$current_user->user_login,
                    'delete_others_posts' => 'delete_others_'.$current_user->user_login,
                    'read_private_posts' => 'read_private_'.$current_user->user_login,
                    'edit_post' => 'edit_'.$current_user->user_login,
                    'delete_post' => 'delete_'.$current_user->user_login,
                    'read_post' => 'read_'.$current_user->user_login,
                ),
            )
        );
    }
    add_action( 'init', 'create_user_home' );
    
    // A query could be done like this:
    wp_reset_query(); // to be sure
    
    global $wp_query, $current_user;
    get_currentuserinfo();
    
    $query_user_home = new WP_Query( array(
        ,'order'        => 'ASC'
        ,'post_type'    => 'home_of_'.$current_user->user_login
        ,'post_status'  => 'publish'
    ) );
    
    if ( $query_user_home->have_posts() ) :
        while ( $query_user_home->have_posts() ) : $query_user_home->the_post();
            // check for password
            if ( post_password_required() ) :
                the_content();
            elseif ( !current_user_can('') ) :
                // display some decent message here
                return;
            else :
    
                // here goes your content
    
            endif;
        endwhile;
    
    else : // else; no posts
        printf(__( 'Nothing from Mr./Mrs. %1$s so far.', TEXTDOMAIN ), $current_user->user_firstname.' '.$current_user->user_lastname);
    endif; // endif; have_posts();
    
    wp_rewind_posts(); // for a sec. query
    

    С таксономиями это имело бы даже больше смысла, потому что вы могли бы запрашивать только посты, которые помечены терминами из таксономий пользователей, но для этого потребуется метаполе поста с терминами таксономии пользователей. Условие будет таким же: имя пользователя для входа, и вы просто добавите таксономию:

    function create_user_tax() {
        if ( current_user_can("$current_user->user_login") ) :
            global $current_user;
            get_currentuserinfo();
    
            $singular = $current_user->user_login;
            $plural = $singular.''s';
    
            // labels
            $labels = array (
                     'name'         => $plural
                    ,'singular_name'=> $singular
                );
    
            // args
            $args = array (
                 'public'               => true
                ,'show_in_nav_menus'    => true
                ,'show_ui'              => true
                ,'query_var'            => true
                ,'labels'               => $labels
                ,'capabilities' => array(
                    'manage_'.$current_user->user_login
                )
            );
    
            // Register
            register_taxonomy ( 
                 $current_user->user_login
                ,array ( 'post', 'page' )
                ,$args
            ); 
            // Add to post type
            // you can even add your current user post type here
            register_taxonomy_for_object_type (
                 $current_user->user_login
                 ,array ( 'post', 'page', 'home_of_'.$current_user->user_login ) 
            );
        endif;
    }
    add_action( 'init', 'create_user_tax' );
    

    Размещение проверки возможностей (current_user_can) может быть и другим. Все зависит от ваших конкретных потребностей. Просто чтобы убедиться в этом: это примеры, которые помогут вам найти решение. Надеюсь, это поможет 🙂

    • 0
  7. Я сделал что-то подобное с «участниками», настраиваемым типом сообщений и ручным назначением авторских прав конкретному участнику, поскольку это веб-сайт небольшой группы, но я помню, как читал в какой-то ветке поддержки прессы, что это возможно чтобы подключиться к процессу регистрации, поэтому я полагаю, что можно было бы автоматически создать страницу/настраиваемый тип сообщения для каждого пользователя при регистрации и назначить эту конкретную страницу вновь созданному участнику в качестве домашней страницы. Я также добавил интерфейсный редактор Scribu и заблокировал серверную часть для участников, не являющихся администраторами. Вероятно, вы также можете добавить перенаправление при регистрации, чтобы новые участники перенаправлялись на свою страницу (которая, я полагаю, может иметь некоторый контент по умолчанию).

    Я посмотрю, смогу ли я найти эту ветку поддержки buddypress.

    Дополнение — ошибка в селекторе автора в поле редактирования поста. В настоящее время он не использует стандартную систему разрешений, что может усложнить решение для участников (хотя, вероятно, оно будет работать, если автор назначен при создании страницы). В trac есть патч, но я не думаю, что его еще применили к ядру.

    • 0
  8. это возможно с плагином s2member, достаточно бесплатной версии. Я создал клиентскую область, где у каждого клиента есть URL-адрес, здесь есть видеоурок: http://www.primothemes.com/forums/viewtopic.php?f=4&t=586&start=0&hilit=client+area

    • 0

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

You must login to add an answer.