web-dev-qa-db-fra.com

Comment puis-je connaître le type de message actuel lorsque post.php est dans admin?

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

global $post_type;
var_dump($post_type);

Il retourne NULL.

mais si je fais ceci:

global $pagenow;
var_dump($pagenow);

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

J'ai regardé dans cette fonction $screen = get_current_screen(); mais ce n'est pas déclaré avant que les hooks admin_init se soient écoulés, puis c'est trop tard.

Ma question est donc la suivante: comment puis-je, au moment où admin_init est exécuté, savoir quel type de message est le message en cours de modification? Si l'URL est post.php?post=81&action=edit, comment puis-je savoir quel type de message postid = 81 est?

Merci Malthe

9
Malibur
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
    }
}
18
MiCc83

Je vais développer la réponse de MiCc83. Il y a quelques choses qui ne suivent pas les questions initiales du PO mais c'est globalement 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 empêcherait cela de fonctionner sur un type de message "événement". Vous devrez vérifier le type de message "événement" au lieu de "message".

0
MxmastaMills