Woher kenne ich den aktuellen Beitragstyp auf post.php in admin?

11

Ich versuche etwas mit einem admin_init-Hook zu tun, wenn - und nur wenn - der Benutzer einen Beitrag (post.php) mit dem Beitragstyp "event" bearbeitet. Mein Problem ist das, obwohl WordPress auf eine globale Variable verweist, die $ post_type aufruft. wenn ich mache:

global $post_type;
var_dump($post_type);

Es gibt NULL zurück.

aber wenn ich das mache:

global $pagenow;
var_dump($pagenow);

Es gibt meine aktuelle Seite zurück. dh "post.php".

Ich habe mir diese Funktion angesehen, $screen = get_current_screen();aber das wird erst deklariert, nachdem die Hooks admin_init ausgeführt wurden, und dann ist es zu spät.

Meine Frage ist also, wie ich zum Zeitpunkt der Ausführung von admin_init herausfinden kann, welcher Beitragstyp der aktuell bearbeitete Beitrag ist. Wenn die URL post.php?post=81&action=editdann lautet , woher weiß ich, welcher Post-Typ postid = 81 ist?

Danke Malthe

Malibur
quelle
was ist mit global $post?
Sisir
globaler Beitrag ist noch nicht im admin_init-Hook verfügbar
Malibur

Antworten:

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
    }
}
MiCc83
quelle
Beim Bearbeiten eines vorhandenen Beitrags lautet die URL '/wp-admin/post.php?post=81&action=edit'
Malibur
Alles klar
1
Bitte fügen Sie eine Erklärung hinzu, was Ihr Code tut
Pieter Goosen
Eine sehr hilfreiche Antwort auch im Jahr 2018!
LoicTheAztec
Nur-Code-Antworten sind nicht sehr nützlich. Siehe @PieterGoosen Kommentar oben, von vor ~ 5 Jahren ....
random_user_name
0

Ich werde die Antwort von MiCc83 erweitern. Es gibt einige Dinge, die nicht den ursprünglichen Fragen des OP entsprechen, aber insgesamt ist es eine großartige Lösung. Zum Beispiel würde es mit einem post_type-Ereignis nicht funktionieren, da Sie den post_type in der Antwort als 'post' überprüfen.

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);

    }
}

Die Bedingung 'post' === get_post_type( $_GET['post'] )in der vorherigen Antwort würde verhindern, dass dies an einem Beitragstyp 'Ereignis' funktioniert. Sie müssten nach dem Post-Typ 'event' anstelle von 'post' suchen.

MxmastaMills
quelle