¿Cómo sé el tipo de publicación actual cuando estoy en post.php en admin?

11

Estoy tratando de hacer algo con un enlace admin_init si, y solo si, el usuario está editando una publicación (post.php) con el tipo de evento "evento". Mi problema es que, aunque WordPress apunta a una variable global, llama a $ post_type. si lo hago:

global $post_type;
var_dump($post_type);

Devuelve NULL.

pero si hago esto:

global $pagenow;
var_dump($pagenow);

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

$screen = get_current_screen();Investigué esta función, pero eso no se declaró hasta después de que se hayan ejecutado los ganchos admin_init, y luego es demasiado tarde.

Entonces mi pregunta es, ¿cómo puedo, para cuando admin_init se ejecuta, averiguar qué tipo de publicación es la publicación actual que se está editando? si la url es post.php?post=81&action=editentonces, ¿cómo sé qué tipo de publicación es postid = 81?

Gracias Malthe

Malibur
fuente
¿qué pasa global $post?
Sisir
publicación global aún no está disponible en el enlace
admin_init

Respuestas:

21
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    // if the post type is 'event' do something
    if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
        // Do something
    }
}
MiCc83
fuente
Al editar una publicación existente, la url es '/wp-admin/post.php?post=81&action=edit'
Malibur
Todo bien solucionado ahora ... a pesar de que tiene que consultar la base de datos para hacerlo ...
MiCc83
1
Agregue una explicación a lo que hace su código
Pieter Goosen
¡Una respuesta muy útil incluso en 2018!
LoicTheAztec
Las respuestas de solo código no son muy útiles. Vea el comentario de @PieterGoosen arriba, de hace ~ 5 años ...
random_user_name
0

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 evento post_type porque está marcando post_type como 'post' en la respuesta.

add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
    // Global object containing current admin page
    global $pagenow;

    // If current page is post.php and post isset than query for its post type 
    if ( 'post.php' === $pagenow && isset($_GET['post']) ){
        $post_id = $_GET['post'];

        // Do something with $post_id. For example, you can get the full post object:
        $post = get_post($post_id);

    }
}

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

MxmastaMills
fuente