¿Cómo determinar si estamos en la página de añadir nuevo o editar página/entrada/CPT en el panel de WordPress?

24 abr 2012, 08:38:23
Vistas: 27.6K
Votos: 29

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?

0
Todas las respuestas a la pregunta 4
4
40

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
}
24 abr 2012 09:19:35
Comentarios

Alternativamente, encontré otra variable global $current_screen. global $current_screen;

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

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

+1 Pensé que el único condicional de admin era is_admin ;). ¿Hay más?

kaiser kaiser
24 abr 2012 12:25:24

Gracias por tu ayuda

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

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

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

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)

20 dic 2018 21:12:11
0

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

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

8 sept 2019 15:58:39