Admin'de post.php dosyasındaki geçerli yazı türünü nasıl bilebilirim?


11

Im - ve sadece eğer kullanıcı bir yazı (olay.php) yazı tipi "olay" ile düzenliyorsa, admin_init kanca ile bir şeyler yapmaya çalışıyorum. Benim sorunum, wordpress küresel bir değişkeni işaret etmesine rağmen $ post_type çağırıyor. Eğer yaparsam:

global $post_type;
var_dump($post_type);

NULL döndürür.

ama bunu yaparsam:

global $pagenow;
var_dump($pagenow);

geçerli sayfamı döndürüyor. yani "post.php".

Bu işleve baktım $screen = get_current_screen();ama admin_init kancalar çalıştıktan sonra deklare edilmedi ve sonra onun geç.

Yani sorum şu: admin_init çalıştırıldığında nasıl düzenlenirim yazının hangi yazı tipinde olduğunu öğrenin. url ise post.php?post=81&action=edit, postid = 81 yazı tipinin ne olduğunu nasıl bilebilirim?

Teşekkürler Malthe


Ne hakkında global $post?
Sisir

global post henüz admin_init çağrısında mevcut değil
Malibur

Yanıtlar:


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

Mevcut bir postayı düzenlerken URL, '/wp-admin/post.php?post=81&action=edit'
Malibur

Tamam şimdi düzeltildi ... bunu yapmak için db sorgulamak zorunda olsa bile ...
MiCc83

1
Lütfen kodunuzun ne yaptığına bir açıklama ekleyin
Pieter Goosen

2018'de bile çok yararlı bir cevap!
LoicTheAztec

Yalnızca kod yanıtları çok kullanışlı değildir. Yukarıdaki @PieterGoosen yorumuna bakın, ~ 5 yıl önce ....
random_user_name

0

MiCc83'ün cevabını genişleteceğim. OP'nin orijinal sorularını takip etmeyen birkaç şey var, ancak genel olarak harika bir çözüm. Örneğin, yanıtta post_type 'post' olarak kontrol ettiğiniz için post_type olayıyla çalışmaz.

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

    }
}

'post' === get_post_type( $_GET['post'] )Önceki yanıttaki koşul , bunun bir gönderi türü 'olayı' üzerinde çalışmasını engelleyecektir. 'Gönderi' yerine gönderi türü 'olay' olup olmadığını kontrol etmeniz gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.