Comment puis-je connaître le type de publication actuel lorsque je suis sur post.php dans admin?

11

Im essayant de faire quelque chose avec un hook admin_init si - et seulement si - l'utilisateur modifie un post (post.php) avec le type de post "event". Mon problème est que, même si wordpress pointe vers une variable globale appelle $ post_type. si je fais:

global $post_type;
var_dump($post_type);

Il renvoie NULL.

mais si je fais ça:

global $pagenow;
var_dump($pagenow);

il renvoie ma page actuelle. c'est-à-dire "post.php".

J'ai examiné cette fonction, $screen = get_current_screen();mais ce n'est déclaré qu'après l'exécution des hooks admin_init, puis tard.

Donc ma question est, comment puis-je, au moment où admin_init est exécuté, savoir quel type de publication est la publication en cours de modification. si l'URL est post.php?post=81&action=editalors, comment puis-je savoir quel est le type de message postid = 81?

Merci Malthe

Malibur
la source
qu'en est-il global $post?
Sisir
la publication globale n'est pas encore disponible dans le hook
admin_init

Réponses:

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
la source
Lors de la modification d'un message existant, l'URL est '/wp-admin/post.php?post=81&action=edit'
Malibur
Très bien maintenant ... même si vous devez interroger la base de données pour le faire ...
MiCc83
1
Veuillez ajouter une explication à ce que fait votre code
Pieter Goosen
Une réponse très utile même en 2018!
LoicTheAztec
Les réponses codées uniquement ne sont pas très utiles. Voir le commentaire de @PieterGoosen ci-dessus, il y a environ 5 ans ....
random_user_name
0

Je vais développer la réponse de MiCc83. Il y a quelques choses qui ne suivent pas les questions originales du PO, mais dans l'ensemble, c'est une excellente solution. Par exemple, cela ne fonctionnerait pas avec un événement post_type, car vous vérifiez le post_type comme «post» dans la réponse.

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 condition 'post' === get_post_type( $_GET['post'] )dans la réponse précédente l'empêcherait de fonctionner sur un «événement» de type de message. Vous devez vérifier le type de publication «événement» au lieu de «publier».

MxmastaMills
la source