Cum să determini dacă te afli în pagina de Adăugare Nouă sau Editare pentru pagini/articole/CPT în WordPress admin?
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?

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
}

Alternativ, am găsit o altă variabilă globală $current_screen. global $current_screen;
if( $current_screen->post_type =='CPT' && $current_screen->action == 'add'){ //sarcină }

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

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

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)

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
}

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