Come faccio a sapere il tipo di post corrente su post.php in admin?


11

Sto cercando di fare qualcosa con un hook admin_init se - e solo se - l'utente sta modificando un post (post.php) con il tipo di post "evento". Il mio problema è che, anche se wordpress punta a una variabile globale chiama $ post_type. se lo faccio:

global $post_type;
var_dump($post_type);

Restituisce NULL.

ma se lo faccio:

global $pagenow;
var_dump($pagenow);

ritorna la mia pagina attuale. cioè "post.php".

Ho esaminato questa funzione $screen = get_current_screen();ma non è stato dichiarato fino a quando non sono stati eseguiti gli hook di admin_init, e poi è troppo tardi.

Quindi la mia domanda è: come posso, quando admin_init viene eseguito, scoprire quale tipo di post è il post corrente in fase di modifica. se l'URL è post.php?post=81&action=editquindi, come faccio a sapere che tipo di post postid = 81 è?

Grazie Malthe


che dire global $post?
Sisir,

post globale non è ancora disponibile nel hook
admin_init

Risposte:


21
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
    }
}

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

Va bene risolto ora ... anche se devi fare una query sul db per farlo ...
MiCc83

1
Per favore, aggiungi una spiegazione a cosa fa il tuo codice
Pieter Goosen,

Una risposta molto utile anche nel 2018!
LoicTheAztec

Le risposte solo in codice non sono molto utili. Vedi @PieterGoosen sopra, da ~ 5 anni fa ....
random_user_name

0

Ho intenzione di espandere la risposta di MiCc83. Ci sono alcune cose che non seguono le domande originali del PO, ma nel complesso è un'ottima soluzione. Ad esempio, non funzionerebbe con un evento post_type perché stai controllando post_type come 'post' nella risposta.

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 condizione 'post' === get_post_type( $_GET['post'] )nella risposta precedente impedirebbe che ciò funzioni su un tipo di evento "evento". Dovresti controllare il tipo di post "evento" anziché "post".

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.