用于帖子/页面/产品的Wordpress动作钩子

时间:2013-11-28 16:06:48

标签: wordpress

我需要在用户显示post_or_page_or_product(woocommerce产品)时添加操作。 我试着用

add_action( 'the_post', 'my_the_post_action' );

它有效...... 太多
我的意思是在引用帖子的任何时候调用该函数(例如,对于小部件中的链接) 我将需要在显示post_or_page_or_product的页面时调用 功能..
怎么样? 谢谢!

2 个答案:

答案 0 :(得分:0)

要限制一组帖子类型,您可以使用is_singular()条件标记:

add_action( 'init', 'so20270528_init' );
function so20270528_init()
{
    if( ! is_singular( array( 'post', 'page', 'product' ) ) )
        return;

    global $post;

    if( 'somevalue' == get_post_meta( $post->ID, 'somekey', true ) )
        wp_enqueue_script( 'script-name', get_template_directory_uri() . '/js/example.js', array(), '1.0.0', true );
}

答案 1 :(得分:0)

使用2个条件,一个用于检查当前着陆页,另一个用于检查如果循环 has_posts()是主循环。这可以通过内置的in_the_loop()条件测试完成:

function my_the_post_action($post){
    if(is_singular('product') && in_the_loop()) {
        // do some action
    }
}
add_action('the_post', 'my_the_post_action');

您可以跳过return $post,因为此操作通过引用传递$post

注意:使用&& is_main_query()无法在此处工作,因为它会一直返回true

在我的情况下,我需要修改博客存档页面上的小部件,它生成与博客页面本身完全相同的顶级帖子。问题是他们使用相同的模板文件并需要更改action 'the_post'

function my_the_post_action($post){
    if(is_home() && !in_the_loop()) {
        // do some action by examine the $post to find your widget posts
    }
}
add_action('the_post', 'my_the_post_action');