Erlauben Sie dem Mitglied, nur auf den benutzerdefinierten Beitragstyp zuzugreifen. Erlaubnis, nur eigene Beiträge zu bearbeiten

29

OK, ich suche nach dem besten Weg, dies anzugreifen.

Ich bin mit PHP sehr vertraut und erstelle benutzerdefinierte Beitragstypen mit benutzerdefinierten Metafeldern in WordPress.

Folgendes schaue ich mir an:

  1. Der Benutzer registriert sich und ist standardmäßig auf den Abonnenten eingestellt.
  2. Der Benutzer fordert vom Administrator die Berechtigung zum benutzerdefinierten Beitragstyp an.
  3. Der Administrator weist dem Benutzer einen anderen Berechtigungsnamen zu, z. B. "Shop-Inhaber".
  4. Der Benutzer kann nun den benutzerdefinierten Beitragstyp sehen und einen Eintrag zu diesem Beitragstyp vornehmen.
  5. Der Benutzer kann nur seinen eigenen Beitrag sehen und bearbeiten.

Ich brauche Hilfe in folgenden Bereichen:

  1. Wie erstelle ich eine neue "Rolle" mit dem Namen "Ladenbesitzer"?
  2. So geben Sie der Rolle die richtige Berechtigung, nur benutzerdefinierte Beitragstypen anzuzeigen und darauf zuzugreifen.
  3. Nur Benutzer dürfen ihre eigenen Beiträge zu diesem benutzerdefinierten Beitragstyp anzeigen und bearbeiten.

Idealerweise würde ich bevorzugen, dass dies alles vom wp-admin erledigt wurde, aber ich vermute, dass ich möglicherweise ein Front-End dafür bauen muss, um die finite Kontrolle zu bekommen, die ich anstrebe.

Jede Eingabe wird sehr geschätzt.

Mit freundlichen Grüßen

Brady
quelle

Antworten:

21

Benutze Justin Tadlocks Plugin " Members ". Sie haben die Möglichkeit, neue Rollen zu erstellen und vorhandene Rollen zu bearbeiten sowie benutzerdefinierte Funktionen hinzuzufügen. Alles, was Sie tun müssen, kann mit wenigen Klicks erledigt werden.

Ich weiß, dass Sie in Ihrem Kommentar zu ZaMooses Antwort gesagt haben, dass Sie "die Funktionalität selbst schreiben möchten, damit ich die volle Kontrolle über alles habe". Das ist der springende Punkt bei Open-Source-Software. Justin Tadlock hat sein Plugin veröffentlicht, damit Sie es genau verwenden können, damit Sie die vollständige Kontrolle über alles haben WÜRDEN.

Wenn Sie das Rad wirklich wirklich neu erfinden möchten und möglicherweise Hunderte von Stunden Ihrer eigenen Zeit verschwenden möchten, kann ich Sie nicht aufhalten, aber Sie könnten sich zumindest die Mühe sparen und mithilfe des Tadlock-Plugins lernen, wie Sie das tun, was Sie wollen.

Sobald Sie ein Plugin haben, das genau das tut, was Sie wollen, müssen Sie das 'map_meta_cap'Flag in trueund das 'capability_type'Flag in Ihrer Post-Type-Registrierungsfunktion so ändern , dass es etwas anderes als "Post", "Seite" oder ein anderes "reserviertes" anzeigt. Art. Dann duplizieren alle auf Kommentare Fähigkeiten (zB edit_posts, edit_others_posts, publish_posts, etc.), Ihre Fähigkeit Art statt Beiträge verwenden. Vergewissern Sie sich, dass Sie den Administratoren alle diese Berechtigungen zuweisen (Sie können den Beitragstyp erst dann sehen), und erstellen Sie dann Ihre Rolle, die die Fähigkeiten der Rolle "Kontributor" für Ihren Beitragstyp imitiert.

Zum Beispiel, sagen , dass Ihre Fähigkeit Typ war foobars, würden Sie ‚Ladenbesitzer‘ geben wollen , die edit_foobars, delete_foobarsund readFähigkeiten. Auf diese Weise können sie ihre eigenen Entwurfs-Foobars erstellen und diese Entwürfe löschen. Da sie jedoch nicht über die entsprechenden publish_foobarsFunktionen verfügen, müssen sie diese zur Genehmigung einreichen. Da dies nicht edit_published_foobarsder Fall ist, müssen alle Änderungen an einer genehmigten Fußleiste genehmigt werden.

John P Bloch
quelle
OK, ich verwende jetzt das Mitglieder-Plugin, um eine Übersicht über die Mitgliederrechte zu erhalten. Ich habe 'map_meta_cap' => trueund 'capability_type' => 'shopowner'auf meinen benutzerdefinierten Beitragstyp gesetzt. Ich habe eine neue Rolle mit dem Namen erstellt ShopOwnerund ihr die Funktionen read, edit_shopowner, delete_shopowner gegeben. Legen Sie einen Benutzer als ShopOwner fest und melden Sie sich mit diesem Benutzer an. Dieser Benutzer kann den benutzerdefinierten Beitragstyp nicht sehen. Habe ich etwas verpasst
Brady
2
Ändern Sie diese in edit_shopownersund delete_shopowners. edit_shopownerund delete_shopownersind Metafunktionen, gegen die eigentlich nie geprüft wird. Sie werden überprüft, wenn jemand versucht, ein bestimmtes Element zu bearbeiten oder zu löschen, und prüfen dann beispielsweise Folgendes: "Kann dieser Benutzer diese Elementtypen löschen? Können sie nur ihre eigenen oder auch andere Elemente löschen? Können sie veröffentlichte Elemente löschen?" etc.
John P Bloch
Das konnte ich nicht verstehen ... aber ich habe die Funktionalität, die ich suche, erhalten, indem ich Funktionen in meinem benutzerdefinierten Beitragstyp festgelegt und diese Funktionen im Mitglieder-Plugin erstellt habe. Ich habe Ihnen die Antworten gegeben, da Ihr Beitrag für mich am nützlichsten war, um eine Lösung zusammenzustellen. Vielen Dank
Brady
19

Der Registerpost-Typ hat einen Parameter mit der Bezeichnung "Capabilities", über den Sie beispielsweise verfügen können

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

Um einen neuen Benutzer / eine neue Rolle / eine neue Funktion zu erstellen, können Sie add_role, add_cap, verwenden. Dies ist ein einfaches Beispiel für den Einstieg:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );
Wyck
quelle
hmm ... ich bin ein bisschen verwirrt was ist der Unterschied zwischen 2 und 3 Zeilen? : S Fügt es der Rolle "Shop-Inhaber" nicht die gleiche Funktion hinzu?
Dashaluna
Ja, sie sind die gleichen, aber sie zeigen verschiedene Möglichkeiten, dies zu tun. Zuerst wird die Rolle als erster Parameter (Ladenbesitzer) angegeben, dann nur die Obergrenze, da $ role verwendet wird.
Wyck
3
Soll eine Fähigkeit / Erlaubnis übersetzt werden? das ist __ ('');
Svetoslav Marinov
@SvetoslavMarinov Ich habe die Antwort bearbeitet, um die Übersetzung zu entfernen.
MikeSchinkel
@dashaluna Ich habe die Antwort bearbeitet, um sie zu klären.
MikeSchinkel
1

Haben Sie darüber nachgedacht, sich Gravity Forms oder TDO Mini Forms anzuschauen , um den eigentlichen Inhalt zu übermitteln? Sie verfügen jeweils über Funktionen, die Sie auf dem Weg zu einem sicheren Umgang mit vom Benutzer eingereichten Inhalten weiterbringen.

ZaMoose
quelle
Vielen Dank für die Antwort, aber das ist nicht das, wonach ich suche. Hauptsächlich, weil dies Plugins sind. Ich möchte die Funktionalität selbst schreiben, damit ich die volle Kontrolle über alles habe.
Brady
0

Eine einfachere und effizientere Möglichkeit, wie dies durch die Installation eines Plugins namens "Advance Access Manager" erreicht werden kann, besteht darin, dass Sie die Funktionalität nicht schreiben müssen, aber dennoch ein angemessenes Maß an Kontrolle über die Benutzer, Rollen und deren Funktionen haben. Das meiste, was Sie wollen, können Sie mit diesem Plugin erreichen.

dummer Geist
quelle