Come determinare se siamo nella pagina Aggiungi Nuovo o Modifica per pagine/articoli/CPT nell'amministrazione WordPress?
Sembra una cosa semplice ma ho bisogno di un modo per determinare se la schermata corrente è per Aggiungi Nuovo o Modifica (una sorta di tag condizionale per l'amministrazione WordPress). Esiste già una funzione integrata per questo, o... qualche idea su come realizzarlo?

ecco una funzione che ho:
/**
* is_edit_page
* funzione per verificare se la pagina corrente è una pagina di modifica articolo
*
* @author Ohad Raz <admin@bainternet.info>
*
* @param string $new_edit quale pagina verificare accetta new - pagina nuovo articolo, edit - pagina modifica articolo, null per entrambe
* @return boolean
*/
function is_edit_page($new_edit = null){
global $pagenow;
//assicuriamoci di essere nel backend
if (!is_admin()) return false;
if($new_edit == "edit")
return in_array( $pagenow, array( 'post.php', ) );
elseif($new_edit == "new") //verifica pagina nuovo articolo
return in_array( $pagenow, array( 'post-new.php' ) );
else //verifica sia nuova che modifica
return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}
Utilizzo l'utilizzo è semplice come qualsiasi altro conditional tag, ecco alcuni esempi:
verifica pagina nuova o modifica:
if (is_edit_page()){
//sì, è una pagina di modifica/nuovo articolo
}
verifica pagina nuovo articolo:
if (is_edit_page('new')){
//sì, è una pagina di nuovo articolo
}
verifica pagina modifica articolo:
if (is_edit_page('edit')){
//sì, è una pagina di articolo esistente
}
combinala con la variabile globale $typenow
per verificare una specifica pagina di modifica di un custom post type:
global $typenow;
if (is_edit_page('edit') && "Post_Type_Name" == $typenow){
//sì, è una pagina di modifica di un custom post type chiamato Post_Type_Name
}

Grazie. In alternativa ho trovato un'altra variabile globale $current_screen. global $current_screen;
if( $current_screen->post_type =='CPT' && $current_screen->action == 'add'){ //task }

+1 Pensavo che l'unico condizionale per l'admin fosse is_admin
;). Ce ne sono altri?

Continuando il commento di DipeshKC, current_screen
è un hook utile quando il valore current_screen
è disponibile.

Preferisco get_current_screen()
, poiché è molto più semplice:
$screen = get_current_screen();
if ($screen->base == "post") {
}
Questa funzione restituisce un oggetto che include l'ID dello schermo, la base, il tipo di post e la tassonomia, tra altri punti dati.
(Codex)

Volevo enqueue script
e styles
solo su specifiche schermate di new/edit
per un tipo di post. Ho creato una funzione per verificare se mi trovo nella schermata di edit/new-post
per un dato CPT
.
/**
* Verifica se è aperta la schermata di 'edit' o 'new-post'
* per un dato tipo di post
*
* @param null $post_type nome del tipo di post da confrontare
*
* @return bool true o false
*/
function is_edit_or_new_cpt( $post_type = null ) {
global $pagenow;
/**
* restituisce false se non è una pagina di amministrazione o
* il tipo di post da confrontare è null
*/
if ( ! is_admin() || $post_type === null ) {
return FALSE;
}
/**
* se è attiva la schermata di modifica di un tipo di post
*/
if ( $pagenow === 'post.php' ) {
// ottiene l'ID del post, nel caso di visualizzazione di tutti i CPT l'ID sarà -1
$post_id = isset( $_GET[ 'post' ] ) ? $_GET[ 'post' ] : - 1;
// se non c'è ID del post restituisce false
if ( $post_id === - 1 ) {
return FALSE;
}
// ottiene il tipo di post dall'ID del post
$get_post_type = get_post_type( $post_id );
// se il tipo di post corrisponde restituisce true altrimenti false
if ( $post_type === $get_post_type ) {
return TRUE;
} else {
return FALSE;
}
} elseif ( $pagenow === 'post-new.php' ) { // se è attiva la schermata di nuovo post per un tipo di post
// ottiene il tipo di post dall'array $_GET
$get_post_type = isset( $_GET[ 'post_type' ] ) ? $_GET[ 'post_type' ] : '';
// se il tipo di post corrisponde restituisce true altrimenti false
if ( $post_type === $get_post_type ) {
return TRUE;
} else {
return FALSE;
}
} else {
// restituisce false se si trova su qualsiasi altra pagina
return FALSE;
}
}
Per utilizzare la funzione, passa il nome del tipo di post.
/**
* restituisce true se è aperta la schermata di 'edit' o 'new-post' per 'cpt_name'
*/
if ( is_edit_or_new_cpt('cpt_name') ) {
// fai qualcosa
}

ho questa funzione
if(!function_exists('is_post_edit_page')){
function is_post_edit_page() {
static $result = null;
if ( $result === null ) {
$result = false;
if ( is_admin() ) {
if (
empty( $_POST )
&&
isset( $_GET['action'] )
&&
$_GET['action'] === 'edit'
&&
isset( $_GET['post'] )
) {
// Pagina di modifica del post visualizzata
$result = true;
} elseif (
isset( $_POST['action'] )
&&
$_POST['action'] === 'editpost'
&&
isset( $_POST['post_type'] )
&&
isset( $_POST['post_ID'] )
&&
strpos( wp_get_referer(), 'action=edit' ) !== false
) {
// Invio della pagina di modifica del post
$result = true;
}
}
}
return $result;
}
}
che restituisce true nella pagina di modifica e false nelle altre pagine...
