Móc để tải bài và trang


17

Tôi cần chạy một chức năng khi một bài đăng hoặc trang cụ thể được tải. Có bất kỳ hook nào cho phép tôi kiểm tra xem một bài đăng đang được hiển thị trong khi tải trang không?


công khai hoặc quản trị viên / phải đối mặt?
kaiser

Đối với mặt trước. Về cơ bản tôi muốn nó chỉ kích hoạt khi một loại bài đăng tùy chỉnh cụ thể được hiển thị.
Poulomi Nag

Câu trả lời:


24

Bạn có thể sử dụng wphook và kiểm tra global $wp_queryđối tượng hoặc bất kỳ điều kiện nào.

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

Xem: wptrong codex.wordpress.orgwptrong developer.wordpress.org


bạn có thể vui lòng cho tôi biết khi nào 'wp' hook chạy không?
Poulomi Nag

A) Nó chạy trước after_setup_themesetup_themevì vậy nó chỉ có thể truy cập được cho các plugin B) bên trong WP :: main(), được gọi từ bên trong wp-settings.php.
kaiser

1
@kaiser Liệu không phải là wplửa móc sau khi after_setup_thememóc và ngay trước template_redirectdo đó làm cho wptruy cập theo chủ đề cũng như bổ sung? (chỉ để làm rõ?)
Adam

13

Sử dụng template_redirectđó là hook hành động kích hoạt trước khi kết xuất mẫu;

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

@PoulomiNag Không có vấn đề gì, rất vui vì bạn đã tìm thấy câu trả lời của mình ở trên. Mặc dù tôi nghĩ một lưu ý nhỏ là wpchạy theo after_theme_setuphook, do đó, nó không chỉ có thể truy cập bằng các plugin, giúp nó an toàn khi sử dụng trong các chủ đề.
Adam

Tôi chỉ kiểm tra và có; wpchạy sau after_theme_setup. Nhưng tôi cần nó cho plugin của tôi. Vì vậy, wpcũng như template_redirectcả hai làm việc tốt cho tôi. Chúc tôi có thể chấp nhận hai câu trả lời ở đây! :)
Poulomi Nag

Không sao, không cần thiết phải chấp nhận cả hai, chỉ muốn làm rõ thứ tự mà họ bắn. Hãy chắc chắn rằng tôi sẽ không phát điên. Chúc may mắn với plugin của bạn ...
Adam

1

Tôi đã khá thường xuyên sử dụng những điều sau đây để tải vào các hộp meta tùy chỉnh trên các trang (thay vì các bài đăng tùy chỉnh).

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

            }
        }
    }

Cảm ơn Darronz. Nhưng tôi cần một số hook để làm việc ở phần đầu trong khi tải trang. Có ý kiến ​​gì không?
Poulomi Nag

Nếu bạn thay đổi ở trên to add_action('init', // etc)thì nó sẽ hoạt động trên tải trang chứ không chỉ trong phần quản trị.
darronz

2
@darronz Và sau đó bạn cần kiểm tra ! is_admin()bên trong, vì initmóc chạy ở cả hai bên.
kaiser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.