Existe uma maneira (plugin?) De restringir um usuário para poder editar apenas uma página?


9

Usamos o wordpress como um CMS e gostaríamos muito de permitir que os usuários tenham uma "página inicial". Idealmente, eles seriam impedidos de estragar todo o site.

Existe uma maneira simples de limitar os usuários a editar direitos em uma única página?

No momento, estou usando o plug - in Membros para fazer outras coisas baseadas em permissão, por isso seria ótimo se uma solução pudesse aumentar isso de forma ordenada ou substituí-lo completamente.

Pontos de bônus para a criação automática de uma página inicial quando um novo usuário é criado.


ATUALIZAÇÕES: Devo esclarecer que essas páginas precisam ser confinadas a uma área específica do site (ou seja, todos os filhos da mesma página). Além disso, depois de falar com alguns usuários, parece que eles acham útil criar subpáginas ramificadas a partir da página inicial.

Respostas:


5

Uma instalação básica do WordPress provavelmente não fará o que você deseja. Você pode configurar uma instância de vários sites e permitir que os usuários tenham seu próprio 'subsite' ou usar algo como BuddyPress ou Mingle que possui um recurso de perfil de usuário.


4

Desculpe fazer isso, mas me deparei com a resposta nos fóruns do wordpress .

Acontece que Role Scoper faz isso muito bem. O autor desse post no fórum disse o melhor:

Para permitir que um usuário edite uma página específica, mas não qualquer outra coisa:

  1. Dê a eles uma função WordPress de Assinante
  2. Gerenciar> Páginas> Editar sua página
  3. Expanda a guia "Editores" em "Opções avançadas"
  4. Marque a caixa de seleção sem suporte à esquerda do nome do usuário (se as páginas filho forem criadas, marque também a caixa de seleção entre colchetes {[]}, que atribui a função a todas as páginas filho atuais ou futuras)
  5. Salve a página

Parece um processo manual. E se você tiver milhares de usuários?
precisa saber é o seguinte

Isso certamente é verdade, mas é o mais próximo até agora. Vou manter a recompensa aberta até o fim.
Tom Wright

3

Enfrentei a mesma situação que você e o que fiz foi criar um tipo de postagem personalizado chamado "página inicial" e também criei o plug-in "Limites de criação de postagens da Bainternet" para limitar a criação de cada tipo de postagem por usuário. Experimente http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/


Boa abordagem simples. Pequeno problema com a postagem - eu também quero limitar a localização da página.
Tom Wright

limite onde está a página? gostaria de explicar?
Bainternet

Portanto, o problema aqui é que eu quero ter todas as páginas de usuários no mesmo lugar. Ou seja mysite.com/users/bob Além disso, eu também quero permitir sub-páginas no mesmo estilo: mysite.com/users/bob/mysubpage
Tom Wright

2

O plug-in do Gerenciador de acesso do usuário fará isso por você, todas as outras abordagens são muito complicadas. O UAM é fácil, configure grupos e atribua o grupo às suas subpáginas, pronto.



1

A solução implica que você desabilitou a edição dos tipos de postagem "normais" (postagem, página).

É não tão duro como você pode acreditar. A chave é o nome de login do usuário . O mesmo poderia ser feito com taxonomias ou mesmo termos.

Veja o seguinte (também há um exemplo para uma consulta):

// 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

Com taxonomias, isso faria ainda mais sentido, porque você poderia consultar apenas as postagens que estão marcadas com termos das taxonomias desses usuários, mas que precisariam de uma meta caixa de postagem com os termos de taxonomia dos usuários. A condição seria a mesma: nome de login do usuário e você adicionaria a taxonomia:

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

O posicionamento da verificação de capacidade (current_user_can) também pode estar em outro lugar. Depende de todas as suas necessidades específicas. Apenas para ter certeza: Estes são exemplos para guiá-lo no seu caminho para uma solução. Espero que ajude :)


0

Fiz algo semelhante com "members", um tipo de postagem personalizado e uma atribuição manual de direitos de autor a um membro específico, já que é um site de pequeno grupo, mas lembro-me de ler em algum tópico de suporte à imprensa que é possível para se conectar ao processo de inscrição, então suponho que seria possível criar automaticamente um tipo de página / postagem personalizada por usuário na inscrição e atribuir essa página específica ao membro recém-criado como página inicial. Também adicionei o editor front-end do Scribu e bloqueei o back-end para os membros que não são administradores. Provavelmente, você também pode adicionar um redirecionamento na inscrição para que os novos membros sejam redirecionados para suas páginas (que, suponho, possam ter algum conteúdo padrão).

Vou ver se consigo encontrar esse segmento de suporte do buddypress.

Adendo - há um erro no seletor de autor no campo de edição de postagem. Atualmente, ele não usa o sistema de permissão padrão, o que pode dificultar a solução dos membros (embora provavelmente funcione se o autor for designado na criação da página). Existe um patch no trac, mas acho que ainda não foi aplicado ao núcleo.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.