Come faccio a conoscere il tipo di post corrente quando sono su post.php nell'admin?
Sto cercando di fare qualcosa con un hook admin_init se - e solo se - l'utente sta modificando un post (post.php) con tipo di post "event". Il mio problema è che, anche se WordPress fa riferimento a una variabile globale chiamata $post_type, se faccio:
global $post_type;
var_dump($post_type);
Restituisce NULL.
ma se faccio questo:
global $pagenow;
var_dump($pagenow);
restituisce la mia pagina corrente, cioè "post.php".
Ho esaminato questa funzione $screen = get_current_screen(); ma non viene dichiarata fino a dopo che l'hook admin_init è stato eseguito, e a quel punto è troppo tardi.
Quindi la mia domanda è, come faccio, nel momento in cui viene eseguito admin_init, a scoprire quale tipo di post è il post corrente che viene modificato. Se l'URL è post.php?post=81&action=edit allora, come faccio a sapere di che tipo di post è l'ID 81?
Grazie Malthe
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
// Oggetto globale che contiene la pagina admin corrente
global $pagenow;
// Se la pagina corrente è post.php e il post è impostato, allora interroga il suo post type
// se il post type è 'event' fai qualcosa
if ( 'post.php' === $pagenow && isset($_GET['post']) && 'post' === get_post_type( $_GET['post'] ) )
// Fai qualcosa
}
}
Quando modifichi un post esistente, l'URL è '/wp-admin/post.php?post=81&action=edit'
Malibur
Ora è stato risolto... anche se devi interrogare il database per farlo...
Alessandro Benoit
Voglio espandere la risposta di MiCc83. Ci sono alcuni aspetti che non seguono le domande originali dell'OP, ma nel complesso è un'ottima soluzione. Ad esempio, non funzionerebbe con un post_type 'event' perché nella risposta si verifica che il post_type sia 'post'.
add_action( 'admin_init', 'do_something_152677' );
function do_something_152677 () {
// Oggetto globale che contiene la pagina di amministrazione corrente
global $pagenow;
// Se la pagina corrente è post.php e post è impostato, allora interroga il suo post_type
if ( 'post.php' === $pagenow && isset($_GET['post']) ){
$post_id = $_GET['post'];
// Fai qualcosa con $post_id. Ad esempio, puoi ottenere l'oggetto post completo:
$post = get_post($post_id);
}
}
La condizione 'post' === get_post_type( $_GET['post'] ) nella risposta precedente impedirebbe il funzionamento con un post type 'event'. Invece di verificare il post type 'post', bisognerebbe verificare 'event'.