¿Cómo determinar si estamos en la página de añadir nuevo o editar página/entrada/CPT en el panel de WordPress?
Esto parece algo simple, pero necesito una manera de determinar si la pantalla actual es para Añadir Nuevo o Editar (una especie de etiqueta condicional del admin de WordPress). ¿Existe ya una función incorporada para esto, o... alguna idea de cómo lograrlo?

aquí hay una función que tengo:
/**
* is_edit_page
* función para verificar si la página actual es una página de edición de publicación
*
* @author Ohad Raz <admin@bainternet.info>
*
* @param string $new_edit qué página verificar, acepta 'new' - página nueva, 'edit' - página de edición, null para cualquiera
* @return boolean
*/
function is_edit_page($new_edit = null){
global $pagenow;
//asegurarse de que estamos en el backend
if (!is_admin()) return false;
if($new_edit == "edit")
return in_array( $pagenow, array( 'post.php', ) );
elseif($new_edit == "new") //verificar página de nueva publicación
return in_array( $pagenow, array( 'post-new.php' ) );
else //verificar cualquiera, nueva o edición
return in_array( $pagenow, array( 'post.php', 'post-new.php' ) );
}
Uso el uso es simple, igual que cualquier otra etiqueta condicional, algunos ejemplos:
verificar página de nueva o edición:
if (is_edit_page()){
//sí, es una página de edición/nueva publicación
}
verificar página de nueva publicación:
if (is_edit_page('new')){
//sí, es una página de nueva publicación
}
verificar página de edición de publicación:
if (is_edit_page('edit')){
//sí, es una página de publicación existente
}
combinar esto con la variable global $typenow
para verificar una página de edición de un tipo de publicación específico:
global $typenow;
if (is_edit_page('edit') && "Post_Type_Name" == $typenow){
//sí, es una página de edición de un tipo de publicación personalizado llamado Post_Type_Name
}

Alternativamente, encontré otra variable global $current_screen. global $current_screen;
if( $current_screen->post_type =='CPT' && $current_screen->action == 'add'){ //tarea }

Siguiendo el comentario de DipeshKC, current_screen
es un hook útil para cuando el valor de current_screen
está disponible.

Prefiero get_current_screen()
, ya que es mucho más simple:
$screen = get_current_screen();
if ($screen->base == "post") {
}
Esta función devuelve un objeto que incluye el ID de la pantalla, base, tipo de post y taxonomía, entre otros datos.
(Codex)

Quería encolar scripts
y estilos
solo en pantallas específicas de edición/nuevo
tipo de publicación. Creé una función para verificar si estoy en la pantalla de editar/nueva-publicación
del CPT
dado.
/**
* Verifica si la pantalla de 'editar' o 'nueva-publicación' de un
* tipo de publicación dado está abierta
*
* @param null $post_type nombre del tipo de publicación a comparar
*
* @return bool verdadero o falso
*/
function is_edit_or_new_cpt( $post_type = null ) {
global $pagenow;
/**
* retorna falso si no está en la página de administración o
* el tipo de publicación a comparar es nulo
*/
if ( ! is_admin() || $post_type === null ) {
return FALSE;
}
/**
* si la pantalla de edición de un tipo de publicación está activa
*/
if ( $pagenow === 'post.php' ) {
// obtiene el ID de la publicación, en caso de ver todos los CPT el ID será -1
$post_id = isset( $_GET[ 'post' ] ) ? $_GET[ 'post' ] : - 1;
// si no hay ID de publicación, retorna falso
if ( $post_id === - 1 ) {
return FALSE;
}
// obtiene el tipo de publicación desde el ID de la publicación
$get_post_type = get_post_type( $post_id );
// si el tipo de publicación coincide, retorna verdadero, de lo contrario falso
if ( $post_type === $get_post_type ) {
return TRUE;
} else {
return FALSE;
}
} elseif ( $pagenow === 'post-new.php' ) { // si la pantalla de nueva publicación de un tipo está activa
// obtiene el tipo de publicación desde el array $_GET
$get_post_type = isset( $_GET[ 'post_type' ] ) ? $_GET[ 'post_type' ] : '';
// si el tipo de publicación coincide, retorna verdadero, de lo contrario falso.
if ( $post_type === $get_post_type ) {
return TRUE;
} else {
return FALSE;
}
} else {
// retorna falso si está en cualquier otra página.
return FALSE;
}
}
Para usar la función, pasa el nombre del tipo de publicación.
/**
* retorna verdadero si la pantalla de 'editar' o 'nueva-publicación' de 'nombre_cpt' está abierta
*/
if ( is_edit_or_new_cpt('nombre_cpt') ) {
// hacer algo
}

Tengo esta función
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'] )
) {
// Mostrar página de edición de entrada
$result = true;
} elseif (
isset( $_POST['action'] )
&&
$_POST['action'] === 'editpost'
&&
isset( $_POST['post_type'] )
&&
isset( $_POST['post_ID'] )
&&
strpos( wp_get_referer(), 'action=edit' ) !== false
) {
// Enviar página de edición de entrada
$result = true;
}
}
}
return $result;
}
}
que devuelve true en la página de edición y false en las demás páginas...
