cómo saber si el administrador está en la página de edición o entrada

7 dic 2013, 19:17:51
Vistas: 54.9K
Votos: 28

Uso esto después de verificar si el usuario es administrador

   if ( isset($_GET['action'])  && $_GET['action'] === 'edit' )

¿hay una mejor manera?

2
Comentarios

Según mis pruebas de hoy, esta parece ser la mejor manera de hacer esto con los condicionales actuales de WP, porque get_current_screen está documentado como que falla con un error fatal en algunas pantallas de administración. Consulta la documentación para más información, https://codex.wordpress.org/Function_Reference/get_current_screen

Nathan Nathan
25 mar 2016 20:44:13

pero intentar llamar a get_current_screen() resultará en un error fatal porque no está definido. — ¿qué tal si lo envuelves en if (function_exists('get_current_screen')) entonces?

Frank N Frank N
1 ene 2017 10:11:31
Todas las respuestas a la pregunta 3
5
31

Puedes usar get_current_screen para determinar esto.

$screen = get_current_screen();
if ( $screen->parent_base == 'edit' ) {
    echo 'pantalla de edición';
}

No sé si exactamente diría que esto es siempre mejor, depende de lo que se necesite, pero probablemente es la forma en que lo haría yo. La gran ventaja de este método es que obtienes acceso a más información y, por lo tanto, puedes hacer más y diferentes distinciones. Solo echa un vistazo a la documentación para entender a lo que me refiero.

Debería usarse en hooks posteriores, el Codex dice:

La función devuelve null si se llama desde el hook admin_init. Debería estar bien usarlo en un hook posterior como current_screen.

7 dic 2013 19:41:06
Comentarios

Esto también sería cierto en un listado de Entradas y Páginas, ¿verdad? Como por ejemplo miweb.com/wp-admin/edit.php?post_status=borrador&post_type=post

Nathan Nathan
25 mar 2016 20:42:01

@Nathan Cierto, así es. Como se mencionó en la respuesta, lo que es adecuado depende del caso de uso. Esta ciertamente no es la mejor manera de proceder para todos los casos, pero en algunas situaciones es buena, si no incluso la mejor opción.

Nicolai Grossherr Nicolai Grossherr
26 mar 2016 15:38:06

Nota: Llamar a get_current_screen() directamente en muchos casos causará un error fatal. Asegúrate de envolverlo en una función y llamarlo desde un hook apropiado.

squarecandy squarecandy
13 ene 2017 18:53:34

$screen->is_block_editor == 1 funcionó para mí para verificar la página de edición. parent_base aparece vacío.

Floris Floris
21 sept 2021 14:25:36

parent_base siempre es NULL para mí tanto en la lista de publicaciones como en la edición de una sola publicación. Lo que usé en su lugar es if (get_current_screen()->base === 'post' && get_current_screen()->post_type === 'my_post_type'). Esto es para la edición administrativa de una sola publicación. Para la pantalla edit.php (la pantalla de administración con la lista de publicaciones) usa edit en lugar de post.

Denis P Denis P
6 ago 2024 18:27:17
6
27

editar: lee los comentarios para posibles limitaciones.


Puedes usar la variable global $pagenow

global $pagenow;
if ($pagenow == 'post.php' && get_post_type() == 'post') {

    // editando una entrada de blog

}
if ($pagenow == 'profile.php') {

    // editando la página de perfil de usuario

}
10 jul 2017 11:39:55
Comentarios

Encontré que esto funciona excepto para $_GET['post_type']. Sin embargo, get_post_type() funcionó para mí en su lugar.

Ashe Abbott DiBlasi Ashe Abbott DiBlasi
14 sept 2017 19:30:18

$_GET['post_type'] solo se establece en post-new.php, al crear una nueva entrada, y no en post.php que es cuando se está editando la entrada. get_post_type() funcionará para post.php porque la entrada ya existe y tiene un tipo de entrada, pero no estoy seguro de que funcione en post-new.php. La respuesta de Frank es mejor ya que funciona para ambos.

Jacob Peattie Jacob Peattie
10 abr 2018 10:31:35

En la primera condición, ¿por qué hay un OR ( || ) en lugar de un AND ( && )?

alexg alexg
8 jun 2021 12:25:23

gracias por la ayuda. es la mejor respuesta para algunas situaciones.

Abilash Erikson Abilash Erikson
5 nov 2021 13:07:10

no, ¿qué hay de post-new.php? hay nuevos nombres de página en cada versión importante, esto no es confiable.

scavenger scavenger
29 abr 2024 04:46:18

Esto no funciona. Cuando entras y sales de editar un bloque, se vuelve a renderizar el bloque incorrectamente. Esto solo funciona en la primera carga.

Shane McCurdy Shane McCurdy
22 may 2024 18:52:19
Mostrar los 1 comentarios restantes
1
  • Usa 'get_current_screen', pero asegúrate primero de que existe.
  • Como dice el codex "Esta función está definida en la mayoría de páginas de administración, pero no en todas."
  • Esto, por cierto, también filtra las vistas normales (para lectores) (relee esa frase, con énfasis en páginas de administración).
  • es muy probable que lo siguiente que quieras averiguar es si estás realmente en una página o entrada...

    // Eliminar meta cajas de entrada innecesarias
    function FRANK_TWEAKS_current_screen() {
        // "Esta función está definida en la mayoría de páginas de administración, pero no en todas."
        if ( function_exists('get_current_screen')) {  
    
            $pt = get_current_screen()->post_type;
            if ( $pt != 'post' && $pt != 'page') return;
    
            remove_meta_box( 'authordiv',$pt ,'normal' );        // Meta caja de Autor
            remove_meta_box( 'commentstatusdiv',$pt ,'normal' ); // Meta caja de Estado de Comentarios
            remove_meta_box( 'commentsdiv',$pt ,'normal' );      // Meta caja de Comentarios
            remove_meta_box( 'postcustom',$pt ,'normal' );       // Meta caja de Campos Personalizados
            remove_meta_box( 'postexcerpt',$pt ,'normal' );      // Meta caja de Extracto
            remove_meta_box( 'revisionsdiv',$pt ,'normal' );     // Meta caja de Revisiones
            remove_meta_box( 'slugdiv',$pt ,'normal' );          // Meta caja de Slug
            remove_meta_box( 'trackbacksdiv',$pt ,'normal' );    // Meta caja de Trackback
        }
    }
    add_action( 'current_screen', 'FRANK_TWEAKS_current_screen' );
    
1 ene 2017 12:48:54
Comentarios

gracias por compartir, get_current_screen() es la herramienta correcta para usar ya que ofrece una buena cantidad de datos.

Sagive Sagive
9 nov 2017 10:13:21