ユーザーが1ページだけを編集できるように制限する方法(プラグイン?)はありますか?


9

私たちはワードプレスをCMSのように使用しており、ユーザーが「ホームページ」を作成できるようにしたいと思っています。理想的には、サイト全体を汚すことが防止されます。

ユーザーの編集権限を単一のページに制限する簡単な方法はありますか?

私は現在、メンバーズプラグインを使用して他のアクセス許可ベースのことを行っているので、ソリューションがこれをきちんと増強するか、完全に置き換えることができれば素晴らしいと思います。

新規ユーザー作成時にホームページを自動作成するボーナスポイント。


更新:これらのページはサイトの特定の領域(つまり、同じページのすべての子)に限定する必要があることを明確にすべきです。また、一部のユーザーに話しかけたところ、ホームページから分岐するサブページを作成すると便利だと思われるようです。

回答:


5

WordPressの基本インストールでは、おそらく期待どおりに動作しません。マルチサイトインスタンスを設定して、ユーザーが独自の「サブ」サイトを持つことを許可したり、ユーザープロファイル機能を備えたBuddyPressやMingleなどを使用したりできます。


4

申し訳ありませんが、ワードプレスフォーラムで答えを見つけました。

Role Scoperがこれを非常にうまく行っていることがわかります。そのフォーラム投稿の著者はそれを最もよく言った:

ユーザーが特定のページだけを編集できるようにするには:

  1. サブスクライバーのWordPressロールを与えます
  2. 管理>ページ>ページの編集
  3. 「詳細オプション」の下の「エディタ」タブを展開します
  4. ユーザー名の左側にある括弧なしのチェックボックスをオンにします(子ページが作成される場合は、括弧付きチェックボックス{[]}もオンにして、現在または将来のすべての子ページに役割を割り当てます)。
  5. ページを保存

手動プロセスのように聞こえます。何千人ものユーザーがいる場合はどうなりますか?
MikeSchinkel、2011年

それは確かに本当ですが、これまでのところ最も近いです。賞金は最後まで開いたままにしておきます。
トム・ライト

3

私はあなたと同じ状況に直面し、「ホームページ」という名前のカスタム投稿タイプを作成し、ユーザーごとの各投稿タイプの作成を制限する「インターネット投稿作成制限」プラグインも作成しました。http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/をお試しください


素敵なシンプルなアプローチ。投稿ベースの場合のわずかな問題-ページの場所も制限したい。
トム・ライト

ページの場所を制限しますか?説明する気?
Bainternet、2011年

したがって、ここでの問題は、すべてのユーザーページを同じ場所に配置したいということです。つまり、mysite.com / users / bobに加えて、同じスタイルのサブページも許可したい:mysite.com/users/bob/mysubpage
Tom Wright

2

User Access Manager Pluginがこれを行います。他のすべてのアプローチは非常に複雑です。UAMは簡単で、グループをセットアップし、グループをサブページに割り当てて、準備ができています。



1

sollutionは、「通常の」投稿タイプ(投稿、ページ)の編集を無効にしたことを意味します。

それはだではない、あなたが信じているかもしれないほど硬いです。キーがあり、ユーザのログイン名。同じことは、分類法または用語で行うこともできます。

以下を参照してください(クエリの例もあります)。

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