¿Cómo puedo saber el tipo de entrada actual cuando estoy en post.php en el admin?

4 jul 2014, 15:46:47
Vistas: 20.9K
Votos: 17

Estoy tratando de hacer algo con un hook admin_init si - y solo si - el usuario está editando una entrada (post.php) con el tipo de entrada "event". Mi problema es que, aunque WordPress apunta a una variable global llamada $post_type, si hago:

global $post_type;
var_dump($post_type);

Devuelve NULL.

pero si hago esto:

global $pagenow;
var_dump($pagenow);

devuelve mi página actual, es decir, "post.php".

Investigué esta función $screen = get_current_screen(); pero esa no está declarada hasta después de que se ejecute el hook admin_init, y entonces es demasiado tarde.

Entonces mi pregunta es, ¿cómo puedo, al momento en que se ejecuta admin_init, averiguar qué tipo de entrada está siendo editada? Si la URL es post.php?post=81&action=edit entonces, ¿cómo puedo saber de qué tipo de entrada es el postid=81?

Gracias Malthe

2
Comentarios

¿qué pasa con global $post?

Sisir Sisir
4 jul 2014 15:56:38

global post aún no está disponible en el hook admin_init

Malibur Malibur
4 jul 2014 16:15:04
Todas las respuestas a la pregunta 3
5
28
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Objeto global que contiene la página de administración actual
    global $pagenow;

    // Si la página actual es post.php y el post está definido, entonces consulta su tipo de publicación
    // si el tipo de publicación es 'event', haz algo
    if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
        // Haz algo
    }
}
4 jul 2014 16:15:11
Comentarios

Al editar una publicación existente, la URL es '/wp-admin/post.php?post=81&action=edit'

Malibur Malibur
4 jul 2014 16:24:32

Corregido ahora... aunque hay que consultar la base de datos para hacerlo...

Alessandro Benoit Alessandro Benoit
4 jul 2014 16:55:40

Por favor añade una explicación de lo que hace tu código

Pieter Goosen Pieter Goosen
4 jul 2014 16:59:30

¡Una respuesta muy útil incluso en 2018!

LoicTheAztec LoicTheAztec
23 abr 2018 21:08:32

Las respuestas que solo incluyen código no son muy útiles. Mira el comentario de @PieterGoosen arriba, de hace ~5 años...

random_user_name random_user_name
27 mar 2019 20:06:32
0

get_current_screen()->post_type contiene el slug del tipo de publicación. O bien $_REQUEST['post_type']. Ten en cuenta que para páginas/entradas estándar, post_type podría no estar definido.

16 ene 2022 22:35:43
1

Voy a ampliar la respuesta de MiCc83. Hay algunas cosas que no siguen las preguntas originales del OP, pero en general es una gran solución. Por ejemplo, no funcionaría con un post_type 'event' porque estás verificando el post_type como 'post' en la respuesta.

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Objeto global que contiene la página de administración actual
    global $pagenow;

    // Si la página actual es post.php y post está definido, entonces consulta su tipo de publicación
    if ( 'post.php' === $pagenow && isset($_GET['post']) ){
        $post_id = $_GET['post'];

        // Haz algo con $post_id. Por ejemplo, puedes obtener el objeto completo del post:
        $post = get_post($post_id);

    }
}

La condición 'post' === get_post_type( $_GET['post'] ) en la respuesta anterior evitaría que esto funcione con un tipo de publicación 'event'. Necesitarías verificar el tipo de publicación 'event' en lugar de 'post'.

26 mar 2018 04:42:59
Comentarios

Esta es una respuesta completa y funcional.

Marty McGee Marty McGee
9 dic 2020 10:45:18