钩子来加载帖子和页面


17

加载特定的帖子或页面时,我需要运行一个函数。是否有任何钩子可以让我检查页面加载期间是否正在显示帖子?


公共或管理员方面/面对?
kaiser 2012年

对于前端。基本上,我希望它仅在显示特定的单个自定义帖子类型时触发。
Poulomi Nag 2012年

Answers:


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.orgwpdeveloper.wordpress.org中


您能告诉我“ wp”挂钩何时运行吗?
Poulomi Nag 2012年

A)它在after_setup_theme和之前运行setup_theme,因此只能由B)内部的插件访问,该插件WP :: main()是从wp-settings.php中调用的。
kaiser 2012年

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 2012年

没关系,不必接受两者,只是想弄清楚它们触发的顺序。确保我不会发疯。祝您插件顺利!
Adam

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 2012年

如果您更改了上述内容,to add_action('init', // etc)那么它将在页面加载中起作用,而不仅仅是在管理部分中起作用。
darronz 2012年

2
@darronz然后您需要检查! is_admin()内部,因为init钩子在两侧都运行。
kaiser 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.