web-dev-qa-db-de.com

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

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

Ich bin sehr vertraut mit PHP und mache benutzerdefinierte Post-Typen mit benutzerdefinierten Meta-Feldern 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. Erlauben Sie dem Benutzer nur, ihre eigenen Beiträge zu diesem benutzerdefinierten Beitragstyp anzuzeigen und zu 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

29
Brady

Verwenden Sie 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 wirklich wirklich das Rad 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 Tadlocks Plugin verwenden, um zu lernen, wie man es macht was du willst.

Sobald Sie ein Plugin haben, das genau das tut, was Sie wollen, müssen Sie das 'map_meta_cap'-Flag in true und das 'capability_type'-Flag in Ihrer Beitragstyp-Registrierungsfunktion ändern, damit darin etwas anderes als "Beitrag", "Seite" oder ein anderes steht 'reservierter' Typ. Duplizieren Sie dann alle Funktionen, die sich auf Beiträge beziehen (z. B. edit_posts, edit_others_posts, publish_posts usw.), und verwenden Sie Ihren Funktionstyp anstelle von Beiträgen. 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.

Angenommen, Ihr Fähigkeitstyp war foobars, möchten Sie den Ladenbesitzern die Fähigkeiten edit_foobars, delete_foobars und read geben. Auf diese Weise können sie ihre eigenen Entwurfs-Foobars erstellen und diese Entwürfe löschen. Da sie jedoch nicht über publish_foobars-Funktionen verfügen, müssen sie diese zur Genehmigung einreichen. Da sie keinen edit_published_foobars haben, müssen alle Änderungen an einer genehmigten Fußleiste genehmigt werden.

21
John P Bloch

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

19
Wyck

Haben Sie schon einmal 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.

1
ZaMoose

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.

0
sillyghost