Come faccio a conoscere il tipo di post corrente quando sono su post.php nell'admin?

4 lug 2014, 15:46:47
Visualizzazioni: 20.9K
Voti: 17

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

2
Commenti

cosa ne pensi di global $post?

Sisir Sisir
4 lug 2014 15:56:38

global post non è ancora disponibile nell'hook admin_init

Malibur Malibur
4 lug 2014 16:15:04
Tutte le risposte alla domanda 3
5
28
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
    }
}
4 lug 2014 16:15:11
Commenti

Quando modifichi un post esistente, l'URL è '/wp-admin/post.php?post=81&action=edit'

Malibur Malibur
4 lug 2014 16:24:32

Ora è stato risolto... anche se devi interrogare il database per farlo...

Alessandro Benoit Alessandro Benoit
4 lug 2014 16:55:40

Per favore aggiungi una spiegazione su cosa fa il tuo codice

Pieter Goosen Pieter Goosen
4 lug 2014 16:59:30

Una risposta molto utile anche nel 2018!

LoicTheAztec LoicTheAztec
23 apr 2018 21:08:32

Le risposte che contengono solo codice non sono molto utili. Vedi il commento di @PieterGoosen sopra, risalente a circa 5 anni fa...

random_user_name random_user_name
27 mar 2019 20:06:32
0

get_current_screen()->post_type contiene lo slug del post type. Oppure $_REQUEST['post_type']. Nota che per pagine/post standard il post_type potrebbe non essere impostato.

16 gen 2022 22:35:43
1

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

26 mar 2018 04:42:59
Commenti

Questa è una risposta completa e funzionante.

Marty McGee Marty McGee
9 dic 2020 10:45:18