So lassen Sie Benutzer keine neuen Tags erstellen, sondern vorhandene verwenden

9

Ich möchte, dass eine bestimmte Rolle neue Tags hinzufügen kann, aber andere Benutzer sollten nur die Textleiste verwenden können, um nach vorhandenen Tags zu suchen.

Ich weiß, dass ich die Tag-Leiste in der Seitenleiste ausblenden kann, aber das möchte ich nicht. Ich möchte nur, dass es "Sorry, dieses Tag existiert nicht" oder etwas sagt, wenn jemand ein Tag eingibt, das nicht existiert.

Gibt es ein Plugin oder eine Funktion, die das für mich erledigt?

Jorn Reuvers
quelle

Antworten:

10

Sie können sich pre_insert_termwie folgt anmelden , die Taxonomie überprüfen und feststellen, ob der Benutzer die angegebene Rolle hat oder nicht:

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

Dadurch wird verhindert, dass der Benutzer neue Begriffe einfügt, er kann jedoch vorhandene Begriffe suchen und zu einem Beitrag hinzufügen.

Beachten Sie, dass ein Benutzer auf dem Bildschirm nach der Bearbeitung einen Begriff eingeben kann, der nicht vorhanden ist, und die Eingabetaste drücken oder auf die Schaltfläche Hinzufügen klicken kann, um den Begriff zum DOM hinzuzufügen. Zu diesem Zeitpunkt wird der Begriff jedoch erst dann zur Datenbank hinzugefügt Der Benutzer veröffentlicht oder aktualisiert den Beitrag. Ab diesem Zeitpunkt wird der Begriff nicht mehr zugelassen.

Adam
quelle
Hallo, danke für die Hilfe :) Ich habe es versucht, aber es schien nichts zu tun. Ich werde ehrlich sein und sagen, dass es wahrscheinlich meine eigene Schuld ist. Ich habe Ihren Code kopiert und in meine Funktionen eingefügt und natürlich das 'Somerole'-Bit geändert. Das Hinzufügen von Tags ist für diese Rolle weiterhin möglich.
Jorn Reuvers
Welche Benutzerrolle möchten Sie verhindern? Versuchen Sie auch, Tags für die richtige Taxonomie zu verhindern, in diesem Fall post_tagund nicht für eine andere Taxonomie wie categoriesoder eine benutzerdefinierte Taxonomie?
Adam
Ich versuche zu verhindern, dass die Editor-Rolle dies im Moment tut. Und es ist die Standardtaxonomie (das sollte also post_tag sein). Ich habe noch nichts anderes erstellt, da ich noch teste.
Jorn Reuvers
Dann ist es Zeit, mit dem Debuggen zu beginnen. In wp-config.phpden folgenden Konstanten gesetzt define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);und define('WP_DEBUG_DISPLAY', false);dann in der Funktion über Snippet, einen Anruf anzumelden error_log($taxonomy);und eine weiteren Anruf error_log(implode(', ', $user->roles));dann einen Tag hinzufügen , dann den Beitrag aktualisieren, dies wird dann eine erstellen debug.logDatei im wp-contentVerzeichnis. Sie müssen herausfinden, ob diese Funktion aufgerufen wird oder nicht und ob die bedingte Anweisung korrekt eingegeben wird, da dieser Rückruf für mich funktioniert.
Adam