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


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.