2013-11-28 53 views
0

我需要添加一个行动,当用户显示post_or_page_or_product(woocommerce产品)。 我试图用WordPress的行动挂钩帖子/页面/产品

add_action('the_post', 'my_the_post_action'); 

它的工作原理... 太多
我的意思是,任何时候引用帖子都会调用该函数(例如对于窗口小部件中的链接)。
我需要调用函数只有页面的post_or_page_or_product的将被显示..
如何?
谢谢!

回答

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

也许我没有解释好.. – aleclofabbro

+0

也许我没有解释好.. 我基本上要排队一些JS和CSS视后的自定义字段,但我需要将它们添加只有当帖子实际上完全显示时。 带有“the_post”钩子,它恰好为每个帖子调用函数,这些帖子在“最近的帖子”窗口小部件和其他列表中呈现出来,排入所有相关的脚本和css – aleclofabbro

+0

'init'钩子应该没问题,我用一个例子编辑了答案 – diggy

0

使用2个条件语句,一个检查当前的着陆页,其他检查如果循环 that_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');