Cum să determini dacă te afli în pagina de Adăugare Nouă sau Editare pentru pagini/articole/CPT în WordPress admin?

24 apr. 2012, 08:38:23
Vizualizări: 27.6K
Voturi: 29

Deși pare un lucru simplu, am nevoie de o modalitate de a determina dacă ecranul curent este pentru Adăugare Nouă sau Editare (un fel de tag condițional pentru admin-ul WordPress). Există deja o funcție incorporată pentru acest lucru, sau... aveți vreo idee cum să realizez acest lucru?

0
Toate răspunsurile la întrebare 4
4
40

iată o funcție pe care o am:

/**
 * is_edit_page 
 * funcție pentru a verifica dacă pagina curentă este o pagină de editare a articolului
 * 
 * @author Ohad Raz <admin@bainternet.info>
 * 
 * @param  string  $new_edit ce pagină să verifici, acceptă 'new' - pagină nouă de articol, 'edit' - pagină de editare, null pentru oricare
 * @return boolean
 */
function is_edit_page($new_edit = null){
    global $pagenow;
    //asigură-te că suntem în panoul de administrare
    if (!is_admin()) return false;

    
    if($new_edit == "edit")
        return in_array( $pagenow, array( 'post.php',  ) );
    elseif($new_edit == "new") //verifică pagina de articol nou
        return in_array( $pagenow, array( 'post-new.php' ) );
    else //verifică oricare pagină (editare sau nou)
        return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}

Utilizare utilizarea este simplă, la fel ca orice altă condiție, câteva exemple:

verifică pagină de editare sau nouă:

if (is_edit_page()){
   //da, este o pagină de editare/articol nou
}

verifică pagină de articol nou:

if (is_edit_page('new')){
   //da, este o pagină de articol nou
}

verifică pagină de editare articol:

if (is_edit_page('edit')){
   //da, este o pagină de editare a unui articol existent
}

combină aceasta cu variabila globală $typenow pentru a verifica o pagină de editare a unui anumit tip de postare:

global $typenow;
if (is_edit_page('edit') && "Nume_Tip_Postare" == $typenow){
   //da, este o pagină de editare a unui tip de postare personalizat numit Nume_Tip_Postare
}
24 apr. 2012 09:19:35
Comentarii

Alternativ, am găsit o altă variabilă globală $current_screen. global $current_screen;

if( $current_screen->post_type =='CPT' && $current_screen->action == 'add'){ //sarcină }

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

+1 Credeam că singura condiție pentru admin este is_admin ;). Mai sunt și altele?

kaiser kaiser
24 apr. 2012 12:25:24

Mulțumesc pentru ajutor

Muhammad Mabrouk Muhammad Mabrouk
6 oct. 2021 08:01:19

Continuând comentariul lui DipeshKC, current_screen este un cârlig util atunci când valoarea current_screen este disponibilă.

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

Eu prefer get_current_screen(), deoarece este mult mai simplu:

$screen = get_current_screen();
  if ($screen->base == "post") {
}

Această funcție returnează un obiect care include ID-ul ecranului, baza, tipul de postare și taxonomia, printre alte puncte de date.

(Codex)

20 dec. 2018 21:12:11
0

Am vrut să încărcăm script și styles doar pe anumite ecrane de editare/creare ale unui tip de postare. Am creat o funcție pentru a verifica dacă sunt pe ecranul de editare/creare al unui anumit CPT.

/**
 * Verifică dacă ecranul de 'editare' sau 'creare' 
 * al unui anumit tip de postare este deschis
 * 
 * @param null $post_type numele tipului de postare pentru comparare
 *
 * @return bool true sau false
 */
function is_edit_or_new_cpt( $post_type = null ) {
    global $pagenow;

    /**
     * returnează false dacă nu suntem în administrare sau
     * tipul de postare pentru comparare este null
     */
    if ( ! is_admin() || $post_type === null ) {
        return FALSE;
    }

    /**
     * dacă ecranul de editare al unui tip de postare este activ
     */
    if ( $pagenow === 'post.php' ) {
        // obține ID-ul postării, în cazul vizualizării tuturor postărilor CPT, ID-ul va fi -1
        $post_id = isset( $_GET[ 'post' ] ) ? $_GET[ 'post' ] : - 1;

        // dacă nu există ID de postare, returnează false
        if ( $post_id === - 1 ) {
            return FALSE;
        }

        // obține tipul de postare din ID-ul postării
        $get_post_type = get_post_type( $post_id );

        // dacă tipul de postare se potrivește, returnează true, altfel false
        if ( $post_type === $get_post_type ) {
            return TRUE;
        } else {
            return FALSE;
        }
    } elseif ( $pagenow === 'post-new.php' ) { // dacă ecranul de creare a unei postări este activ
        // obține tipul de postare din array-ul $_GET
        $get_post_type = isset( $_GET[ 'post_type' ] ) ? $_GET[ 'post_type' ] : '';
        // dacă tipul de postare se potrivește, returnează true, altfel false
        if ( $post_type === $get_post_type ) {
            return TRUE;
        } else {
            return FALSE;
        }
    } else {
        // returnează false dacă suntem pe orice altă pagină
        return FALSE;
    }
}

Pentru a folosi funcția, treceți numele tipului de postare.

/**
 * returnează true dacă ecranul de 'editare' sau 'creare' al 'cpt_name' este deschis
 */
if ( is_edit_or_new_cpt('cpt_name') ) {
    // fă ceva
}
11 apr. 2019 10:55:23
0

Am această funcție

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 de Editare Postare (afișare)
                    $result = true;
                } elseif (
                    isset( $_POST['action'] )
                    &&
                    $_POST['action'] === 'editpost'
                    &&
                    isset( $_POST['post_type'] )
                    &&
                    isset( $_POST['post_ID'] )
                    &&
                    strpos( wp_get_referer(), 'action=edit' ) !== false
                ) {
                    // Pagina de Editare Postare (trimitere formular)
                    $result = true;
                }
            }
        }

        return $result;
    }
}

care returnează true pe pagina de editare și false pe celelalte pagini...

8 sept. 2019 15:58:39