Bagaimana saya tahu jenis posting saat ini ketika di post.php di admin?

11

Saya mencoba melakukan sesuatu dengan hook admin_init jika - dan hanya jika - pengguna mengedit posting (post.php) dengan jenis tulisan "event". Masalah saya adalah itu, meskipun wordpress menunjuk ke variabel global memanggil $ post_type. bila saya lakukan:

global $post_type;
var_dump($post_type);

Ia mengembalikan NULL.

tetapi jika saya melakukan ini:

global $pagenow;
var_dump($pagenow);

mengembalikan halaman saya saat ini. yaitu "post.php".

Saya melihat ke fungsi ini $screen = get_current_screen();tapi itu tidak dinyatakan sampai setelah admin_init kait telah berjalan, dan kemudian terlambat.

Jadi pertanyaan saya adalah, bagaimana saya, pada saat admin_init dijalankan, cari tahu jenis tulisan yang sedang diedit. jika urlnya post.php?post=81&action=editlalu, bagaimana saya tahu apa jenis postid postid = 81 itu?

Terima kasih, Malthe

Malibur
sumber
bagaimana global $post?
Sisir
pos global belum tersedia di kait
admin_init

Jawaban:

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
sumber
Saat mengedit posting yang ada, url adalah '/wp-admin/post.php?post=81&action=edit'
Malibur
Tetap baik-baik saja sekarang ... walaupun Anda harus meminta db untuk melakukannya ...
MiCc83
1
Silakan tambahkan penjelasan tentang apa yang kode Anda lakukan
Pieter Goosen
Jawaban yang sangat membantu bahkan pada tahun 2018!
LoicTheAztec
Jawaban hanya kode tidak terlalu berguna. Lihat komitmen @PieterGoosen di atas, dari ~ 5 tahun yang lalu ....
random_user_name
0

Saya akan memperluas jawaban MiCc83. Ada beberapa hal yang tidak mengikuti pertanyaan asli OP tetapi secara keseluruhan itu adalah solusi yang bagus. Misalnya, itu tidak akan berfungsi dengan acara post_type karena Anda memeriksa post_type sebagai 'postingan' di jawabannya.

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

    }
}

Kondisi 'post' === get_post_type( $_GET['post'] )dalam jawaban sebelumnya akan mencegah ini bekerja pada 'jenis' posting jenis. Anda perlu memeriksa jenis posting 'acara' alih-alih 'posting'.

MxmastaMills
sumber