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

9

J'essaie de faire quelque chose avec un hook admin_init si - et seulement si - l'utilisateur édite 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 le fais:

global $post_type;
var_dump($post_type);

Il retourne NULL.

mais si je fais cela:

global $pagenow;
var_dump($pagenow);

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

J'ai examiné cette fonction $screen = get_current_screen(); , mais je ne l'ai pas déclarée tant que les hooks admin_init ne sont pas exécutés, puis il 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 alors comment puis-je savoir quel type de message postid = 81 est?

Merci Malthe

    
posée Malibur 04.07.2014 - 14:46

2 réponses

16
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
    }
}
    
réponse donnée MiCc83 04.07.2014 - 15:15
0

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 que post_type est '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'] ) de la réponse précédente empêcherait que cela fonctionne sur un type de publication "événement". Vous devez vérifier le type de message "événement" au lieu de "post".

    
réponse donnée MxmastaMills 26.03.2018 - 03:42

Lire d'autres questions sur les étiquettes