Come non consentire agli utenti di creare nuovi tag, ma consentire loro di utilizzare quelli esistenti


9

Voglio che un determinato ruolo sia in grado di aggiungere nuovi tag, ma altri utenti dovrebbero essere in grado di utilizzare la barra di testo per cercare tag esistenti.

So che posso nascondere la barra dei tag nella barra laterale, ma non lo voglio. Voglio solo che dica "Mi dispiace, questo tag non esiste" o qualcosa quando qualcuno inserisce un tag che non esiste.

C'è un plugin o una funzione che lo farà per me?

Risposte:


10

È possibile agganciarsi pre_insert_term, verificare la tassonomia e se l'utente ha o meno il ruolo specificato come segue:

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

Ciò impedirà all'utente di inserire nuovi termini ma consentirà loro di cercare e aggiungere termini esistenti a un post.

Beaware che quando nella schermata di modifica post un utente può inserire un nome inesistente e premere invio o fare clic sul pulsante Aggiungi che aggiungerà il termine al DOM, tuttavia a questo punto il termine non viene aggiunto al database fino a quando l'utente pubblica o aggiorna il post a quel punto il termine non sarà consentito.


Ciao, grazie per l'aiuto :) Ho provato questo, ma non sembra fare nulla. Sarò onesto e dirò che probabilmente è colpa mia. Copio il tuo codice incollato nelle mie funzioni e ovviamente ho cambiato il bit "somerole". L'aggiunta di tag è ancora possibile per quel ruolo.
Jorn Reuvers,

Qual è il ruolo utente che stai cercando di prevenire? Inoltre, stai cercando di impedire i tag per la tassonomia corretta, in questo caso post_tage non qualche altra tassonomia simile categorieso una tassonomia personalizzata?
Adam,

Sto cercando di impedire al ruolo dell'editor di farlo al momento. Ed è la tassonomia standard (quindi dovrebbe essere post_tag), non ho ancora creato nient'altro mentre sto ancora testando.
Jorn Reuvers il

È ora di iniziare il debug. In wp-config.phpimpostare le seguenti costanti, define('WP_DEBUG', true);, define('WP_DEBUG_LOG', true);, e define('WP_DEBUG_DISPLAY', false);quindi nella funzione frammento di sopra, accedere ad una chiamata error_log($taxonomy);e un'altra chiamata per error_log(implode(', ', $user->roles));poi aggiungere un tag quindi aggiornare il post, questo sarà quindi creare un debug.logfile nella wp-contentdirectory. È necessario capire se questa funzione viene chiamata o meno e se sta inserendo correttamente l'istruzione condizionale perché questa richiamata funziona per me.
Adam,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.