ขอติดโหลดและโพสต์หน้า


17

ฉันจำเป็นต้องเรียกใช้ฟังก์ชั่นเมื่อโหลดโพสต์หรือหน้าเฉพาะ มีตะขอใดบ้างที่ให้ฉันตรวจสอบว่ามีการแสดงโพสต์ในระหว่างการโหลดหน้าเว็บหรือไม่


ด้านสาธารณะหรือผู้ดูแลระบบ / หันหน้าไปทาง?
ไกเซอร์

สำหรับปลายด้านหน้า โดยทั่วไปฉันต้องการให้ทริกเกอร์เฉพาะเมื่อมีการแสดงประเภทโพสต์ที่กำหนดเองหนึ่งรายการเท่านั้น
Poulomi Nag

คำตอบ:


24

คุณสามารถใช้wpตะขอและตรวจสอบglobal $wp_queryวัตถุหรือเงื่อนไขใด ๆ

add_action( 'wp', 'wpse69369_special_thingy' );
function wpse69369_special_thingy()
{
    if (
        'special_cpt' === get_post_type()
        AND is_singular()
    )
        return print "Yo World!";

    return printf(
        '<p>Nothing to see here! Check the object!<br /></p><pre>%s</pre>',
        var_export( $GLOBALS['wp_query'], true )
    );
}

ดู: wpใน codex.wordpress.orgและwpใน developer.wordpress.org


คุณช่วยเล่าให้ฉันฟังได้ว่า 'wp' ใช้งานตะขอเมื่อไหร่?
Poulomi Nag

A) มันทำงานมาก่อนafter_setup_themeและsetup_themeดังนั้นจึงสามารถเข้าถึงได้เฉพาะปลั๊กอิน B) WP :: main()ซึ่งเรียกจากภายใน wp-settings.php
ไกเซอร์

1
@kaiser ไม่wpขอไฟหลังจากafter_setup_themeฮุกและถูกต้องก่อนtemplate_redirectจึงwpสามารถเข้าถึงได้โดยธีมและปลั๊กอินใช่ไหม (เพื่อชี้แจงเท่านั้น)
อดัม

13

ใช้template_redirectอันไหนคือตะขอการกระทำที่ยิงก่อนที่จะสร้างแม่แบบ

add_action('template_redirect', 'hooker');
function hooker(){
    //I load just before selecting and rendering the template to screen
}

@PoulomiNag ไม่มีปัญหาดีใจที่คุณพบคำตอบของคุณด้านบน แม้ว่าฉันจะคิดว่าโน้ตตัวเล็ก ๆ ตัวหนึ่งนั้นwpวิ่งตามafter_theme_setupตะขอดังนั้นมันจึงไม่สามารถเข้าถึงได้โดยปลั๊กอินทำให้ปลอดภัยที่จะใช้ในธีม
อดัม

ฉันเพิ่งตรวจสอบและใช่; หลังจากวิ่งwp after_theme_setupแต่ฉันต้องการมันสำหรับปลั๊กอินของฉัน ดังนั้นwpเช่นเดียวกับtemplate_redirectทั้งปรับทั้งการทำงานสำหรับฉัน หวังว่าฉันจะยอมรับคำตอบที่สองที่นี่! :)
Poulomi Nag

ก็โอเคไม่จำเป็นต้องยอมรับทั้งคู่แค่ต้องการชี้แจงลำดับที่พวกเขายิง ทำให้แน่ใจว่าฉันจะไม่บ้าคุณก็รู้ ขอให้โชคดีกับปลั๊กอินของคุณ ...
อดัม

1

ฉันมักจะใช้วิธีต่อไปนี้เพื่อโหลดในกล่องเมตาแบบกำหนดเองบนหน้าเว็บ (แทนที่จะเป็นโพสต์ที่กำหนดเอง)

    add_action('admin_init','how_we_do_it_meta');

    function how_we_do_it_meta() {

        if ( $_SERVER['SCRIPT_NAME'] == '/wp-admin/post.php' ) {

            $post_id = $_GET['post'] ? $_GET['post'] : $_POST['post_ID'];
            $template_file = get_post_meta($post_id,'_wp_page_template',TRUE);

            if ($template_file == 'page-how-we-do-it.php') {

                add_meta_box('how_we_do_it_who-meta', 'Who we work with...', 'how_we_do_it_who', 'page', 'normal', 'high');

                add_action('save_post', 'save_how_we_do_it_meta');

            }
        }
    }

ขอบคุณ Darronz แต่ฉันต้องการเบ็ดเพื่อทำงานที่ส่วนหน้าระหว่างการโหลดหน้า ความคิดใด ๆ
Poulomi Nag

หากคุณเปลี่ยนสิ่งข้างต้นto add_action('init', // etc)มันจะทำงานกับการโหลดหน้าเว็บมากกว่าเฉพาะในส่วนของผู้ดูแลระบบ
darronz

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