Fähigkeit, eigene Beiträge und nicht andere zu bearbeiten

Was ist die Fähigkeit, die Benutzer ihre eigenen Beiträge und nicht andere bearbeiten lassen? Ich versuche, den Postautoren zu ermöglichen, eine Plugin-function nur für die Posts zu nutzen, die sie besitzen.

Die Erlaubnis, auf die Option zuzugreifen, sollte nur für bestimmte Postautoren gelten und selbst die Redakteure sollten keinen Zugriff haben. Neben den Postautoren sollte nur der Administrator Zugriff haben.

Der Code des Plugins hat:

function init() { // must be logged in if( is_user_logged_in() ) { // actions add_action('admin_head', array($this,'admin_head')); add_action('admin_menu', array($this,'admin_menu')); add_action('wp_enqueue_scripts', array($this,'wp_enqueue_scripts')); add_action('wp_head', array($this,'wp_head')); add_action('wp_footer', array($this,'wp_footer')); add_action('wp_ajax_live_edit_update_width', array($this, 'ajax_update_width')); } } 

Ich habe die Plugin-Datei bearbeitet, um die Fähigkeiten zu ändern (Zeile 79).

  function init() { // must be logged in if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator')) { // actions add_action('admin_head', array($this,'admin_head')); add_action('admin_menu', array($this,'admin_menu')); add_action('wp_enqueue_scripts', array($this,'wp_enqueue_scripts')); add_action('wp_head', array($this,'wp_head')); add_action('wp_footer', array($this,'wp_footer')); add_action('wp_ajax_live_edit_update_width', array($this, 'ajax_update_width')); } } 

Jetzt haben nur die Post-Autoren und Administratoren Zugriff darauf. Aber ich möchte current_user_can('author') durch eine function ersetzen, die es dem Autor erlaubt, seinen eigenen Beitrag zu bearbeiten und nicht andere. Die functionen wie edit_posts oder edit_published_posts den Zugriff auf alle Posts.

Kann mir jemand etwas über eine Fähigkeit erzählen, mit der Benutzer ihre eigenen Posts bearbeiten können und andere nicht? Bitte lassen Sie mich wissen, ob die Art, wie ich sie benutzt habe, richtig ist. if( is_user_logged_in() && current_user_can('author') || current_user_can('administrator'))

Hier ist der Code des Plugins: http://pastebin.com/m1E9QthM . Link zum ursprünglichen Plugin ist http://wordpress.org/support/plugin/live-edit

Solutions Collecting From Web of "Fähigkeit, eigene Beiträge und nicht andere zu bearbeiten"

Die functionen, die Sie einschränken möchten, sind

  • delete_others_posts
  • edit_others_posts

Abgesehen von Super Admin und Administrator ist die einzige Rolle, die diese Berechtigung hat, der Editor. Daher sollten Sie diese functionen aus dem Editor entfernen.

 /** * Remove capabilities from editors. * * Call the function when your plugin/theme is activated. */ function wpcodex_set_capabilities() { // Get the role object. $editor = get_role( 'editor' ); // A list of capabilities to remove from editors. $caps = array( 'delete_others_posts', 'edit_others_posts', ); foreach ( $caps as $cap ) { // Remove the capability. $editor->remove_cap( $cap ); } } add_action( 'init', 'wpcodex_set_capabilities' ); 

Sie sollten diesen Code nur während einer Plugin- oder Theme-Aktivierung ausführen. Aus dem Kodex

Hinweis: Diese Einstellung wird in der database gespeichert (in der Tabelle wp_options, Feld ‘wp_user_roles’), also sollten Sie dies nur einmal ausführen, bei Aktivierung / Deaktivierung des Themas / Plugins.

Ein Autor ist jemand, der seine eigenen Beiträge veröffentlichen und verwalten kann. Vielleicht hilft hier ein Blick in den Codex Roles and Capabilities , der Ihnen alle Rollen von WordPress und die verschiedenen Möglichkeiten zeigt.

Wenn Sie functionen kombinieren und abgleichen möchten , müssen Sie möglicherweise eine neue Rolle mit add_role () erstellen.

Sie können die Berechtigung zum Bearbeiten eines speziellen Beitrags mit der edit_post indem Sie die post-ID als zweites Argument an die function current_user_can() :

 current_user_can( 'edit_post', $post_ID ) 

Dies edit_posts die Fähigkeit edit_posts wenn das post_author Feld dieses post_author mit der aktuellen Benutzer-ID übereinstimmt. Für weitere Details, wie das funktioniert, siehe den Code der function map_meta_cap() in wp-includes/capabilities.php um die Zeile 1073.

Bearbeiten: Was in Ihrem Plugin is_singular() , können Sie nach is_singular() und die ID von get_the_ID() , um Ihre Plugin-functionalität bedingt anzuwenden. Dafür ist der init Hook zu früh. Benutze stattdessen den wp Haken. Damit können Sie Ihre Scripts zum Beispiel für einzelne Abfragen (Seiten, Beiträge, …) anwenden. Vergessen Sie nicht, die Metakappe zu überprüfen, wenn Sie einen Beitrag speichern (zum Beispiel in Ajax-callbacken).

Sie können get_post() , prüfen, ob get_current_user_id gleich der post_author Information ist, und danach handeln …

 if ('edit.php' === $GLOBALS['pagenow']) { if ( current_user_can('administrator') || get_post(filter_input(INPUT_POST, 'post_id'))->post_author == get_current_user_id() ) { // Yes, you can } else { wp_redirect(admin_url()); exit; } }