it-swarm.com.de

Aktivieren Sie Kommentare für Posts, bei denen das Kommentar-Meta-Feld entfernt wurde

Ich habe einen benutzerdefinierten Beitragstyp in einem Plugin für eine Site erstellt, an der ich arbeite. Ich erlaube Benutzern, denen eine benutzerdefinierte Rolle zugewiesen wurde, den benutzerdefinierten Beitragstyp hinzuzufügen, zu bearbeiten oder zu löschen. Ich möchte diesen Benutzern über das Posten hinaus so wenig Funktionen wie möglich im Admin-Bereich zur Verfügung stellen.

Deshalb habe ich remove_meta_box verwendet, um für diese Benutzer über ein Plug-in einige Bereiche im Bearbeitungsbildschirm für Konversationsbeiträge zu entfernen. Eine der von mir deaktivierten Meta-Boxen ist commentsstatusdiv, die die Formularelemente für den Kommentarstatus und Trackbacks enthält.

Wenn das Formularelement für den Kommentarstatus fehlt, wird das Feld comment_status anscheinend deaktiviert. Ich möchte Kommentare für den Beitragstyp als Standard festlegen und verhindern, dass Benutzer in dieser Rolle die Kommentareinstellung ändern. Wenn die Benutzer den Kommentar speichern, wird der Status deaktiviert.

Ich kann eine Einstellung mit dem Filter wp_insert_post_data erzwingen. Aber ich möchte nicht für Admins außer Kraft setzen. Ich möchte, dass Administratoren die Kontrolle haben.

Wie kann ich erzwingen, dass der Kommentarstatus standardmäßig aktiviert ist, und verhindern, dass Benutzer einer bestimmten Rolle ihn ändern, während Administratoren sie weiterhin aktivieren/deaktivieren können?

1
Dave Konopka

Hier ist, womit ich gelandet bin. Für Benutzer mit eingeschränktem Zugriff lege ich Kommentare fest, wenn die Post-Anleitung leer ist. Andernfalls entferne ich das Feld comment_status für diese Benutzer vollständig. Dadurch werden neue Posts standardmäßig mit aktivierten Kommentaren versehen, und es wird verhindert, dass Änderungen durch Benutzer mit eingeschränktem Zugriff deaktiviert werden. Gleichzeitig können Administratoren die Einstellung aktivieren/deaktivieren.

add_filter( 'wp_insert_post_data', 'handle_comments_setting' );
function handle_comments_setting( $data ) {
  if ( current_user_can( 'limited_role_name' )) {
    if ( $data['guid'] == '') {
      //Default new posts to allow comments
      $data['comment_status'] = "open";        
    } else {
      //Otherwise ignore comment setting for community_member role users
      unset($data['comment_status']);
    }
  }
  return $data;
}
2
Dave Konopka