WordPress在body标签后直接挂钩

时间:2010-08-27 05:20:45

标签: php wordpress

我在找到用于插件的正确挂钩时遇到问题。我想要做的是通过让我的插件添加一个功能,在每个页面的顶部添加一条消息。什么是最好的钩子使用?我想在<body>代码后插入内容。

编辑:我知道它已经过了3年了,但这里有一张感兴趣的人的电子票:http://core.trac.wordpress.org/ticket/12563

9 个答案:

答案 0 :(得分:35)

或者,如果您自己创建主题和/或可以修改主题,则可以使用WordPress'do_action功能自行创建操作。这也是他们创建其他钩子的方式。因此,基本上在您的主题中,您可以在<body>标记之后找到您想要的位置,并执行以下操作:

do_action('after_body');

您还可以将参数传递给动作回调,有关信息,请参阅链接文档。

然后,您只需使用add_action函数挂钩即可。

add_action('after_body', 'my_callback');

希望有所帮助。对不起,如果我误解了。

答案 1 :(得分:12)

在Wordpress中创建自定义钩子非常简单。 在header.php(或任何你可能需要钩子的地方)找到:

<body <?php body_class(); ?>>
<div id="body-container">

并成功:

<body <?php body_class(); ?>>
<?php body_begin(); ?>
<div id="body-container">

这是我们的钩子,现在让它成功。 在functions.php添加:

function body_begin() {
do_action('body_begin');
}

现在可以使用hook,只需在functions.php中添加您需要的任何操作:

function my_function() {
/* php code goes here */
}
add_action('body_begin', 'my_function');

或javascript(跟踪代码等 - 这不是完美的方式,从.js文件加载javascript是一种更好的做法,但它肯定比直接向模板文件添加javascript更好):

function my_function() { ?>
<script>
<!-- javascript goes here --!>
</script>
<?php
}
add_action('body_begin', 'my_function');

答案 2 :(得分:11)

这有点困难......大多数主题在该领域没有任何钩子。您可以将javascript / html解决方案挂钩到wp_footer并将其显示在页面顶部...有点Stack Overflow如何做到这一点,或Twitter如何进行通知。

这是WordPress中包含的所有钩子的最佳参考: http://adambrown.info/p/wp_hooks/

答案 3 :(得分:4)

我在互联网上搜索了同一个问题的答案,却一无所获。我想出去解决它。我的插件infinite Ad Pay基于此方法。

你需要两个钩子 wp_head wp_footer 挂钩

 

add_action( 'wp_head', 'my_buffer_holder_fxn');

function my_buffer_holder_fxn(){
ob_start()


}


function my_buffer_pour_out_fxn(){

$get_me_buffers  = ob_get_clean();

$pattern ='/<[bB][oO][dD][yY]\s[A-Za-z]{2,5}[A-Za-z0-9 "_=\-\.]+>|<body>/';
ob_start();
if(preg_match($pattern, $get_me_buffers, $get_me_buffers_return)){


$d_new_body_plus =$get_me_buffers_return[0]."<div class='my_below_body_code'> This is below the body text or image or anything you want </div>";

echo preg_replace($pattern, $d_new_body_plus, $get_me_buffers);

}
ob_flush();
}



}

add_action( 'wp_footer', 'my_buffer_pour_out_fxn');


// You can also use the method above to place anything in other sections of WordPress 
//No Javascript used

答案 4 :(得分:1)

在这种情况下,我所做的是:使用Jquery追加或添加内容:

http://api.jquery.com/prepend/

答案 5 :(得分:1)

一个非常非常非常糟糕的解决方案是:

/* Insert tracking code or others directly after BODY opens */
add_filter('body_class', 'wps_add_tracking_body', PHP_INT_MAX); // make sure, that's the last filter in the queue
function wps_add_tracking_body($classes) {

  // close <body> tag, insert stuff, open some other tag with senseless variable      
  $classes[] = '"><script> /* do whatever */ </script><noscript></noscript novar="';

  return $classes;
}

答案 6 :(得分:0)

我在网上找不到任何工作示例,但我有一个解决方案,我希望它可以帮助任何人。这很简单,只需添加jquery并做任何你想做的事情。以下示例可能对任何人都有帮助。

jQuery(document).ready( function($) {
$('body').prepend('<h1>Hello world</h1>');
});

这是网站网址 https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

在上述答案的帮助下,我制作了一个插件,可直接在body标签后添加内容。 以下是示例代码:

var wcs_thankyou_msg =  " Your coupon code is <?php echo $post_title; ?>."+"<?php echo get_option('wcs_thankyou_msg'); ?>"

var wcs_scratch_after_text =  "<?php  echo $wcs_scratch_after_text;?>"

var discount_text = "<?php  echo $post_excerpt;?>"

var offer_message = "<?php echo get_option('wcs_offer_text'); ?>" 

var id = "<?php echo $post_id; ?>"



$('body').prepend('<div id="scratch_main"><div class="scratch_open">'+offer_message+'</div><div id="scratchmain" style="overflow:hidden;"><div class="scratchinnermain"><div class="scratch_text"><div class="scratch_close"></div><div class="scratchtxtstl">'+wcs_top_text+'</div><div class="scratchtxtstl2">'+wcs_top_text_h2+'</div><div id="wscratchpad" class="scratch_img"><div id="scratchBg" class="scratchpad"></div><div class="scratch_offer" style="display:none">'+discount_text+'</div></div></div><div class="scratch_form"><div id="thankYouDiv" style="display:none"><div class="scratch_close"></div><div class="form_txt1">'+wcs_thankyou_msg+'</div></div><div class="scratchinnermain" id="scratchinnermain" style="display:none"><div class="form_txt1">'+wcs_scratch_after_text+'</div><div class="scratch_form_main"><div id="returnmessage"></div><div id="ajax-loading-wp">Sending, Please wait...</div><form id="mycontactform" action="" method="post"><div class="clear_input"><div class="label">Name :</div><div class="wc_input"><input id="name" type="text" name="name"/></div></div><div class="clear_input"><div class="label">Email :</div><div class="wc_input"><input id="email" type="text" name="email"/><input id="submit" type="button" value="send" class="register_btn"/></div></div></form></div></div></div></div></div></div>');

});

最令人惊奇的是,我不知道如何以简单的方式完成上述代码,在body标签之后立即动态数据。我希望我的回答可以帮助别人并提出更好的主意。 实时工作示例:http://codecanyon.net/item/woocommerce-coupon-scratch-discount/9235287

答案 7 :(得分:0)

WordPress现在通过在5.2版中添加'wp_body'钩子解决了这一问题。您现在可以通过执行以下操作来勾入或插入HTML正文中:

<?php add_action('wp_body', function() { //some code to fire or inject HTML here }); ?>

对于大多数基本用户来说,最好将其放在主题的functions.php文件中。

答案 8 :(得分:0)

变化,变化,变化。因此看来,自2019年3月以来(从WP 5.2起),我们有一种更好的方法来实现此目的。

有一个新功能wp_body_open()。为了支持它,您的主题必须在<body>打开标记后立即调用此函数:

<html>
  <head>

    ..
    ..

    <?php wp_head(); ?>

  </head>
  <body>

    <?php wp_body_open(); ?>

    ..
    ..

    <?php wp_footer(); ?>

  </body>
</html>

然后,您可以像使用wp_headwp_footer钩子一样在<body>之后打印任何内容。