Come determinare se siamo nella pagina Aggiungi Nuovo o Modifica per pagine/articoli/CPT nell'amministrazione WordPress?

24 apr 2012, 08:38:23
Visualizzazioni: 27.6K
Voti: 29

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?

0
Tutte le risposte alla domanda 4
4
40

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
}
24 apr 2012 09:19:35
Commenti

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 }

Dipesh KC Dipesh KC
24 apr 2012 11:05:47

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

kaiser kaiser
24 apr 2012 12:25:24

Grazie per il tuo aiuto

Muhammad Mabrouk Muhammad Mabrouk
6 ott 2021 08:01:19

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

Tyler Collier Tyler Collier
30 nov 2021 22:30:19
0

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)

20 dic 2018 21:12:11
0

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
}
11 apr 2019 10:55:23
0

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

8 set 2019 15:58:39