come sapere se l'amministratore è nella pagina di modifica articolo o pagina

7 dic 2013, 19:17:51
Visualizzazioni: 54.9K
Voti: 28

Uso questo codice dopo aver verificato se l'utente è amministratore

if ( isset($_GET['action']) && $_GET['action'] === 'edit' )

Esiste un modo migliore?

2
Commenti

Durante i miei test di oggi, questo sembra essere il modo migliore per farlo con le condizionali attuali di WP, perché get_current_screen è documentato come fallimento con un errore fatale su alcuni schermi di amministrazione. Vedi la documentazione per maggiori informazioni, https://codex.wordpress.org/Function_Reference/get_current_screen

Nathan Nathan
25 mar 2016 20:44:13

ma tentare di chiamare get_current_screen() risulterà in un errore fatale perché non è definito. — beh allora avvolgendolo in if (function_exists('get_current_screen'))?

Frank N Frank N
1 gen 2017 10:11:31
Tutte le risposte alla domanda 3
5
31

Puoi usare get_current_screen per determinare questo.

$screen = get_current_screen();
if ( $screen->parent_base == 'edit' ) {
    echo 'schermata di modifica';
}

Non so se direi esattamente che questo sia sempre meglio, dipende da ciò che è necessario, ma probabilmente è il modo in cui lo farei. Il grande vantaggio di questo metodo è che hai accesso a più informazioni e quindi puoi fare più distinzioni e diverse. Dai un'occhiata alla documentazione per capire cosa intendo.

Dovrebbe essere utilizzato in hook successivi, il Codex dice:

La funzione restituisce null se chiamata dall'hook admin_init. Dovrebbe andare bene usarla in un hook successivo come current_screen.

7 dic 2013 19:41:06
Commenti

Questo sarebbe vero anche per un elenco di articoli e pagine, giusto? Ad esempio mywebsite.com/wp-admin/edit.php?post_status=draft&post_type=post

Nathan Nathan
25 mar 2016 20:42:01

@Nathan Vero, è così. Come detto nella risposta, ciò che è giusto per lo scopo dipende dal caso d'uso. Certamente questo non è il modo migliore per tutti i casi, ma in alcune situazioni è buono se non addirittura il migliore.

Nicolai Grossherr Nicolai Grossherr
26 mar 2016 15:38:06

Nota: Chiamare direttamente get_current_screen() in molti casi causerà un errore fatale. Assicurati di racchiuderlo in una funzione e chiamarlo da un hook appropriato.

squarecandy squarecandy
13 gen 2017 18:53:34

$screen->is_block_editor == 1 ha funzionato per me per verificare la pagina di modifica. parent_base risulta vuoto.

Floris Floris
21 set 2021 14:25:36

parent_base per me è sempre NULL sia nell'elenco dei post che nella modifica del singolo post. Quello che ho usato invece è if (get_current_screen()->base === 'post' && get_current_screen()->post_type === 'my_post_type'). Questo è per la modifica amministrativa del singolo post. Per la schermata edit.php (la schermata di amministrazione con l'elenco dei post) usa edit invece di post.

Denis P Denis P
6 ago 2024 18:27:17
6
27

modifica: leggi i commenti per possibili limitazioni.


Puoi utilizzare la variabile globale $pagenow

global $pagenow;
if ($pagenow == 'post.php' && get_post_type() == 'post') {

    // modifica di un articolo del blog

}
if ($pagenow == 'profile.php') {

    // modifica della pagina del profilo utente

}
10 lug 2017 11:39:55
Commenti

Ho scoperto che questo funziona tranne per $_GET['post_type']. Tuttavia, get_post_type() ha funzionato per me invece.

Ashe Abbott DiBlasi Ashe Abbott DiBlasi
14 set 2017 19:30:18

$_GET['post_type'] è impostato solo su post-new.php, quando si crea un nuovo post, e non su post.php che è quando il post viene modificato. get_post_type() funzionerà per post.php perché il post esiste già e ha un tipo di post, ma non sono sicuro che funzioni su post-new.php. La risposta di Frank è migliore in quanto funziona per entrambi.

Jacob Peattie Jacob Peattie
10 apr 2018 10:31:35

Nella prima condizione, perché c'è un OR ( || ) piuttosto che un AND ( && )?

alexg alexg
8 giu 2021 12:25:23

grazie per l'aiuto. è la risposta migliore in alcune situazioni.

Abilash Erikson Abilash Erikson
5 nov 2021 13:07:10

no, e per quanto riguarda post-new.php? ci sono nuovi nomi di pagina ad ogni versione importante, questo non è affidabile.

scavenger scavenger
29 apr 2024 04:46:18

Questo non funziona. Quando clicchi dentro e fuori dalla modifica di un blocco, lo ri-renderizza in modo errato. Funziona solo al primo caricamento.

Shane McCurdy Shane McCurdy
22 mag 2024 18:52:19
Mostra i restanti 1 commenti
1
  • Usa 'get_current_screen', ma assicurati prima che esista.
  • Come dice il codex "Questa funzione è definita sulla maggior parte delle pagine di amministrazione, ma non su tutte."
  • Tra l'altro questo filtra anche le visualizzazioni normali (legate ai lettori) (rileggi quella frase, con enfasi su pagine di amministrazione).
  • molto probabilmente la prossima cosa che vorrai capire è se sei effettivamente su una pagina o un articolo...

    // Rimuovi i meta box inutili degli articoli
    function FRANK_TWEAKS_current_screen() {
        // "Questa funzione è definita sulla maggior parte delle pagine di amministrazione, ma non su tutte."
        if ( function_exists('get_current_screen')) {  
    
            $pt = get_current_screen()->post_type;
            if ( $pt != 'post' && $pt != 'page') return;
    
            remove_meta_box( 'authordiv',$pt ,'normal' );        // Meta box Autore
            remove_meta_box( 'commentstatusdiv',$pt ,'normal' ); // Meta box Stato Commenti
            remove_meta_box( 'commentsdiv',$pt ,'normal' );      // Meta box Commenti
            remove_meta_box( 'postcustom',$pt ,'normal' );       // Meta box Campi Personalizzati
            remove_meta_box( 'postexcerpt',$pt ,'normal' );      // Meta box Estratto
            remove_meta_box( 'revisionsdiv',$pt ,'normal' );     // Meta box Revisioni
            remove_meta_box( 'slugdiv',$pt ,'normal' );          // Meta box Slug
            remove_meta_box( 'trackbacksdiv',$pt ,'normal' );    // Meta box Trackback
        }
    }
    add_action( 'current_screen', 'FRANK_TWEAKS_current_screen' );
    
1 gen 2017 12:48:54
Commenti

grazie per la condivisione, get_current_screen() è lo strumento giusto da utilizzare in quanto offre una buona quantità di dati.

Sagive Sagive
9 nov 2017 10:13:21