come sapere se l'amministratore è nella pagina di modifica articolo o pagina
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'hookadmin_init
. Dovrebbe andare bene usarla in un hook successivo comecurrent_screen
.

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 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.

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.

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

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
.

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
}

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

$_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.

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

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

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

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