it-swarm.com.de

Mehrere Benutzer - Erlauben Sie ihnen nur, ihre eigenen Begriffe für die benutzerdefinierte Taxonomie zu verwalten, wenn sie angemeldet sind

Wie kann ich jedem Benutzer erlauben, seine eigenen Begriffe für eine benutzerdefinierte Taxonomie zu verwalten, wenn er auf der Seite "Tags bearbeiten" angemeldet ist? Der Benutzer zeigt und verwaltet nur Begriffe, die nur von ihm erstellt wurden und keine anderen für eine benutzerdefinierte Taxonomie. Aber Admin und Editor können alles verwalten. Wie kann ich das machen?

Jede Hilfe wird geschätzt. Vielen Dank.

3
mha

Danke für die AWESOME-Lösung MikeSchinkel: D

Ich habe gerade die folgenden Aktualisierungen im Code vorgenommen und es hat wie ein Zauber funktioniert:

add_filter('list_terms_exclusions', 'yoursite_list_terms_exclusions', 10, 2);

function yoursite_list_terms_exclusions( $exclusions ) {
    $currentScreen = get_current_screen();

    if( current_user_can( 'my_custom_capability_assigned_to_specific_users' )
            && !current_user_can( 'manage_options' ) // Show everything to Admin
            && is_object( $currentScreen )
            && $currentScreen->id == 'edit-<my_taxonomy>'
            && $currentScreen->taxonomy == '<my_taxonomy>' ) {
        // Get term_id's array that you want to show as per your requirement
        $terms      = implode( ',', $term_id );
        $exclusions = ( empty( $exclusions ) ? '' : $exclusions ) . ' AND' . ' t.`term_id` IN (' . $terms . ')';
    }
    return $exclusions;
}
2
Rashy

Hmmm. Sie müssen nachverfolgen, wer welche Begriffe hinzugefügt hat, die Sie derzeit am besten in einem Usermeta-Feld als durch Kommas getrennte Liste ausführen können (Ich gehe davon aus, dass Sie nicht mehr als ~ 1000 Begriffe pro erwarten Benutzer? Viel mehr als ich mir Sorgen machen würde.)

Sie können die Term-IDs im Feld "usermeta" mit dem Haken "'edited_terms'" speichern, wie hier gezeigt:

Grundsätzlich könnte Ihr Code so aussehen "

add_filter('edited_terms', 'yoursite_edited_terms');
function yoursite_edited_terms($term_id) {
  if($_POST['taxonomy'] == 'your_taxonomy'): {
    $user = wp_get_current_user();
    if ($user->ID) {
      $terms = get_user_meta($user->ID,'users_terms_for_your_taxonomy');
      $terms = (empty($terms) ? $term_id : "{$terms},{$term_id}");
      update_user_meta($user->ID,'users_terms_for_your_taxonomy',$terms);
    }
  }
}

Dann müssen Sie den Haken 'list_terms_exclusions' verwenden, um Ihre Begriffe nur auf diejenigen zu beschränken, die für den aktuellen Benutzer erforderlich sind, dem Administrator jedoch erlauben, sie alle anzuzeigen, indem Sie eine 'can_manage_all_terms'-Funktion hinzufügen, die Sie verwenden können Mitglieder-Plugin zum Erstellen von:

So könnte das aussehen:

add_filter('list_terms_exclusions', 'yoursite_list_terms_exclusions', 10, 2);
function yoursite_list_terms_exclusions( $exclusions, $args ) {
  global $pagenow;
  if (current_user_can('can_manage_all_terms') && 
    $pagenow=='edit-tags.php?taxonomy=your_post_taxonomy') {
    $terms = get_user_meta($user->ID,'users_terms_for_your_taxonomy');
    $exclusions = " {$exclusions} AND t.ID NOT IN ({$terms})";
  }
  return $exclusions;
}

Ich habe diesen Code nicht getestet, aber er sollte Sie auf den richtigen Weg bringen. Stellen Sie außerdem sicher, dass Sie den Code 'your_taxonomy' durch einen Verweis auf Ihre tatsächliche Taxonomie ersetzen.

3
MikeSchinkel