ฉันจะทราบประเภทโพสต์ปัจจุบันได้อย่างไรเมื่ออยู่ใน post.php ในผู้ดูแลระบบ


11

ฉันกำลังพยายามทำบางสิ่งด้วย admin_init ขอหาก - และเฉพาะในกรณีที่ผู้ใช้กำลังแก้ไขโพสต์ (post.php) ด้วยโพสต์ประเภท "เหตุการณ์" ปัญหาของฉันคือว่าแม้ว่า wordpress ชี้ไปที่ตัวแปรทั่วโลกเรียก $ post_type ถ้าฉันทำ:

global $post_type;
var_dump($post_type);

ส่งคืนค่า NULL

แต่ถ้าฉันทำสิ่งนี้:

global $pagenow;
var_dump($pagenow);

มันกลับหน้าปัจจุบันของฉัน เช่น "post.php"

ฉันดูในฟังก์ชั่นนี้$screen = get_current_screen();แต่ไม่ได้ประกาศจนกว่าจะหลังจาก admin_init hooks ทำงานและจากนั้นก็ช้า

ดังนั้นคำถามของฉันคือฉันจะรัน admin_init ได้อย่างไรโดยดูว่าโพสต์ประเภทใดที่โพสต์ปัจจุบันที่กำลังแก้ไขอยู่ ถ้า URL เป็นเช่นpost.php?post=81&action=editนั้นฉันจะรู้ได้อย่างไรว่าโพสต์ประเภท postid = 81 คืออะไร

ขอบคุณ Malthe


แล้วglobal $postไงล่ะ
Sisir

โพสต์ทั่วโลกยังไม่สามารถใช้งานได้ใน admin_init hook เลย
Malibur

คำตอบ:


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

เมื่อแก้ไขโพสต์ที่มีอยู่ url คือ '/wp-admin/post.php?post=81&action=edit'
Malibur

แก้ไขเรียบร้อยแล้วตอนนี้ ... แม้ว่าคุณจะต้องค้นหาฐานข้อมูลเพื่อทำ ...
MiCc83

1
โปรดเพิ่มคำอธิบายว่าโค้ดของคุณทำอะไรได้บ้าง
Pieter Goosen

คำตอบที่เป็นประโยชน์มากแม้ในปี 2018!
LoicTheAztec

คำตอบรหัสเท่านั้นไม่มีประโยชน์มาก ดูคำสั่ง @PieterGoosen ด้านบนจาก ~ 5 ปีที่แล้ว ....
random_user_name

0

ฉันจะขยายคำตอบของ MiCc83 มีบางสิ่งที่ไม่ปฏิบัติตามคำถามดั้งเดิมของ OP แต่โดยรวมแล้วมันเป็นทางออกที่ดี ตัวอย่างเช่นจะไม่ทำงานกับเหตุการณ์ post_type เนื่องจากคุณตรวจสอบ post_type เป็น 'โพสต์' ในคำตอบ

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'] )ในคำตอบก่อนหน้านี้จะป้องกันไม่ให้สิ่งนี้ทำงานกับ 'โพสต์' ชนิดของโพสต์ คุณจะต้องตรวจสอบประเภทเหตุการณ์ 'โพสต์' แทน 'โพสต์'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.