我在找到用于插件的正确挂钩时遇到问题。我想要做的是通过让我的插件添加一个功能,在每个页面的顶部添加一条消息。什么是最好的钩子使用?我想在<body>
代码后插入内容。
编辑:我知道它已经过了3年了,但这里有一张感兴趣的人的电子票:http://core.trac.wordpress.org/ticket/12563
答案 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追加或添加内容:
答案 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_head
或wp_footer
钩子一样在<body>
之后打印任何内容。