Gibt es eine Möglichkeit (Plugin?), Einen Benutzer darauf zu beschränken, nur eine Seite bearbeiten zu können?

9

Wir verwenden WordPress wie ein CMS und möchten den Benutzern sehr gerne eine "Homepage" ermöglichen. Im Idealfall würden sie daran gehindert, die gesamte Site durcheinander zu bringen.

Gibt es eine einfache Möglichkeit, die Bearbeitungsrechte von Benutzern auf eine einzelne Seite zu beschränken?

Ich verwende derzeit das Mitglieder-Plugin , um andere auf Berechtigungen basierende Dinge zu erledigen. Es wäre also großartig, wenn eine Lösung dies entweder ordentlich erweitern oder vollständig ersetzen könnte.

Bonuspunkte für die automatische Erstellung einer Homepage beim Erstellen eines neuen Benutzers.


UPDATES: Ich sollte klarstellen, dass diese Seiten auf einen bestimmten Bereich der Website beschränkt sein müssen (dh alle Kinder derselben Seite). Nachdem Sie mit einigen Benutzern gesprochen haben, scheint es für sie nützlich zu sein, Unterseiten zu erstellen, die von ihrer Homepage aus verzweigen.

Tom Wright
quelle

Antworten:

5

Eine Basis-WordPress-Installation wird wahrscheinlich nicht das tun, was Sie wollen. Sie können eine Instanz mit mehreren Standorten einrichten und Benutzern erlauben, eine eigene Unterwebsite zu erstellen, oder BuddyPress oder Mingle mit einer Benutzerprofilfunktion verwenden.

Norcross
quelle
4

Tut mir leid, aber ich bin über die Antwort in den WordPress-Foren gestolpert .

Es stellt sich heraus, dass Role Scoper dies wirklich gut macht. Der Autor dieses Forumsbeitrags sagte es am besten:

So ermöglichen Sie einem Benutzer das Bearbeiten einer bestimmten Seite, jedoch nichts anderes:

  1. Geben Sie ihnen eine WordPress-Rolle als Abonnent
  2. Verwalten> Seiten> Seite bearbeiten
  3. Erweitern Sie die Registerkarte "Editoren" unter "Erweiterte Optionen".
  4. Aktivieren Sie das Kontrollkästchen ohne Klammern links neben dem Namen Ihres Benutzers (wenn untergeordnete Seiten erstellt werden, aktivieren Sie auch das Kontrollkästchen mit Klammern {[]}, mit dem die Rolle für alle aktuellen oder zukünftigen untergeordneten Seiten zugewiesen wird.)
  5. Speichern Sie die Seite
Tom Wright
quelle
Klingt nach einem manuellen Vorgang. Was ist, wenn Sie Tausende von Benutzern haben?
MikeSchinkel
Das ist sicherlich wahr, aber es ist das bisher nächstgelegene. Ich werde das Kopfgeld bis zum Ende offen halten.
Tom Wright
3

Ich hatte die gleiche Situation wie Sie und habe einen benutzerdefinierten Beitragstyp mit dem Namen "Homepage" und das Plugin "Bainternet Posts Creation Limits" erstellt, um die Erstellung jedes Beitragstyps pro Benutzer einzuschränken. Probieren Sie es aus http://wordpress.org/extend/plugins/bainternet-posts-creation-limits/

Bainternet
quelle
Schöner einfacher Ansatz. Leichtes Problem damit, dass es postbasiert ist - ich möchte auch einschränken, wo sich die Seite befindet.
Tom Wright
begrenzen, wo die Seite ist? Möchtest du das erklären?
Bainternet
Das Problem hier ist also, dass ich alle Benutzerseiten am selben Ort haben möchte. Dh mysite.com/users/bob Plus, ich möchte auch Unterseiten im gleichen Stil zulassen: mysite.com/users/bob/mysubpage
Tom Wright
2

Das User Access Manager Plugin erledigt dies für Sie, alle anderen Ansätze sind viel zu kompliziert. UAM ist einfach, richten Sie Gruppen ein und weisen Sie die Gruppe Ihren Unterseiten zu.

BUGHUNTER
quelle
1

Die Lösung impliziert, dass Sie die Bearbeitung "normaler" Beitragstypen (Beitrag, Seite) deaktiviert haben.

Es ist nicht so schwer, wie Sie vielleicht glauben. Der Schlüssel ist der Benutzername . Das gleiche könnte mit Taxonomien oder sogar Begriffen geschehen.

Siehe Folgendes (es gibt auch ein Beispiel für eine Abfrage):

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

Bei Taxonomien wäre dies sogar noch sinnvoller, da Sie nur die Beiträge abfragen könnten, die mit Begriffen aus den Taxonomien dieses Benutzers gekennzeichnet sind, für die jedoch ein Post-Meta-Feld mit den Taxonomiebegriffen des Benutzers erforderlich wäre. Die Bedingung wäre dieselbe: Benutzeranmeldename und Sie würden einfach die Taxonomie hinzufügen:

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

Die Platzierung der Fähigkeitsprüfung (current_user_can) könnte auch woanders sein. Hängt alles von Ihren spezifischen Bedürfnissen ab. Nur um dies sicher zu stellen: Dies sind Beispiele, die Sie auf Ihrem Weg zu einer Lösung führen. Hoffe das hilft :)

Kaiser
quelle
0

Ich habe etwas Ähnliches mit "Mitgliedern", einem benutzerdefinierten Beitragstyp und einer manuellen Zuweisung von Autorenrechten an ein bestimmtes Mitglied gemacht, da es sich um eine Website für kleine Gruppen handelt, aber ich erinnere mich, dass ich in einem Support-Thread für Buddy-Presse gelesen habe, dass dies möglich ist Um sich in den Anmeldevorgang einzubinden, wäre es vermutlich möglich, bei der Anmeldung automatisch einen Seiten- / benutzerdefinierten Beitragstyp pro Benutzer zu erstellen und diese bestimmte Seite dem neu erstellten Mitglied als Startseite zuzuweisen. Ich habe auch Scribus Front-End-Editor hinzugefügt und das Backend für Mitglieder blockiert, die keine Administratoren sind. Sie können wahrscheinlich auch eine Weiterleitung bei der Anmeldung hinzufügen, damit neue Mitglieder auf ihre Seite umgeleitet werden (die vermutlich Standardinhalte haben könnte).

Ich werde sehen, ob ich diesen Buddypress-Support-Thread finden kann.

Nachtrag - Es gibt einen Fehler in der Autorenauswahl im Feld "Beitrag bearbeiten". Derzeit wird das Standardberechtigungssystem nicht verwendet, was die Lösung für Mitglieder möglicherweise schwieriger macht (obwohl es wahrscheinlich funktioniert, wenn der Autor bei der Seitenerstellung zugewiesen wird). Es gibt einen Patch in trac, aber ich glaube nicht, dass er noch auf den Kern angewendet wurde.


quelle