사용자가 한 페이지 만 편집 할 수 있도록 제한하는 방법 (플러그인)이 있습니까?


9

Google은 워드 프레스를 CMS처럼 사용하며 사용자가 "홈페이지"를 가질 수 있도록하고자합니다. 이상적으로 그들은 전체 사이트를 방해하는 것을 막을 수 있습니다.

사용자의 편집 권한을 단일 페이지로 제한하는 간단한 방법이 있습니까?

현재 멤버 플러그인 을 사용하여 다른 권한 기반 작업을 수행하고 있으므로 솔루션이 깔끔하게 기능을 보강하거나 완전히 바꿀 수 있다면 좋을 것입니다.

새로운 사용자가 생성 될 때 홈페이지 자동 생성을위한 보너스 포인트.


업데이트 :이 페이지는 사이트의 특정 영역 (예 : 동일한 페이지의 모든 자식)에 국한되어야한다는 것을 분명히해야합니다. 또한 일부 사용자와 대화 한 후 홈페이지에서 분기 된 하위 페이지를 만드는 것이 유용 할 것 같습니다.

답변:


5

기본 WordPress 설치는 아마도 원하는 작업을 수행하지 않을 것입니다. 다중 사이트 인스턴스를 설정하고 사용자가 자신의 '하위'사이트를 갖도록하거나 사용자 프로필 기능이있는 BuddyPress 또는 Mingle과 같은 것을 사용할 수 있습니다.


4

이렇게해서 죄송하지만 워드 프레스 포럼에서 우연히 발견했습니다 .

Role Scoper 가 이것을 잘 수행 한다는 것이 밝혀졌습니다 . 이 포럼 게시물의 작성자는 다음과 같이 말했습니다.

사용자가 특정 페이지를 하나만 편집 할 수 있도록하려면

  1. 가입자에게 워드 프레스 역할 제공
  2. 관리> 페이지> 페이지 편집
  3. "고급 옵션"에서 "편집기"탭을 확장하십시오.
  4. 사용자 이름 왼쪽의 괄호가 아닌 확인란을 선택합니다 (자식 페이지가 생성되는 경우 모든 현재 또는 미래의 자식 페이지에 대한 역할을 할당하는 괄호 확인란 {[]}도 확인하십시오).
  5. 페이지 저장

수동 프로세스처럼 들립니다. 수천 명의 사용자가있는 경우 어떻게합니까?
MikeSchinkel

확실히 사실이지만, 지금까지 가장 가깝습니다. 바운티를 끝까지 열겠습니다.
Tom Wright

3

나는 당신과 같은 상황에 직면했고 내가 한 일은 "홈페이지"라는 커스텀 게시물 유형을 만드는 것이었고 또한 사용자 당 각 게시물 유형의 생성을 제한하기 위해 "인터넷 게시물 생성 제한"플러그인을 만들었습니다. http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/를 사용해보십시오


좋은 간단한 접근 방식. 게시물 기반이므로 약간의 문제가 있습니다. 또한 페이지의 위치를 ​​제한하고 싶습니다.
Tom Wright

페이지의 위치를 ​​제한합니까? 설명 할까?
Bainternet

여기서 문제는 모든 사용자 페이지를 같은 장소에두고 싶다는 것입니다. 즉, mysite.com/users/bob Plus, 또한 같은 스타일의 하위 페이지를 허용하고 싶습니다. mysite.com/users/bob/mysubpage
Tom Wright

2

User Access Manager 플러그인이이 작업을 수행하며 다른 모든 접근 방식은 너무 복잡합니다. UAM은 설정이 쉽고 그룹을 하위 페이지에 할당 할 수 있습니다.



1

해결 방법은 "일반"게시물 유형 (게시물, 페이지) 편집을 비활성화했음을 의미합니다.

그건 하지 열심히 당신이 믿는 수있다. 는 IS 사용자 로그인 이름 . 분류법이나 용어로도 마찬가지입니다.

다음을 참조하십시오 (쿼리에 대한 예도 있습니다).

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

소규모 회원 웹 사이트이기 때문에 "회원", 맞춤 게시물 유형 및 특정 회원에게 직접 저자 권한을 할당하는 것과 비슷한 작업을 수행했지만 일부 버디 프레스 지원 스레드에서 읽을 수 있음을 기억합니다. 가입 과정에 연결하여 가입시 사용자 당 페이지 / 맞춤 게시 유형을 자동으로 생성하고 해당 페이지를 새로 만든 회원에게 홈페이지로 할당하는 것이 가능하다고 생각합니다. 또한 Scribu의 프런트 엔드 편집기를 추가하고 관리자가 아닌 구성원에게 백엔드를 차단했습니다. 가입시 리디렉션을 추가하여 새 회원이 자신의 페이지로 리디렉션되도록 할 수도 있습니다 (기본 내용이있을 수 있음).

buddypress 지원 스레드를 찾을 수 있는지 확인할 수 있습니다.

부록-게시물 편집 필드의 작성자 선택기에 버그가 있습니다. 현재 표준 권한 시스템을 사용하지 않으므로 멤버 솔루션이 더 어려워 질 수 있습니다 (작성자가 페이지 작성에 할당 된 경우에도 작동 할 수 있음). trac에 패치가 있지만 아직 코어에 적용되지 않았다고 생각합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.