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