我想在<body>
标签
是否可以只使用WordPress挂钩?
我想在<body>
标签
是否可以只使用WordPress挂钩?
只需将自定义挂钩添加到模板:
<body>
<?php do_action( \'wpse73370_custom_hook\' ); ?>
之后reading this answer 这是我做的。
ob_start();
add_action(\'shutdown\', function() {
if ( is_admin() ) {
return;
}
$final = \'\';
$levels = ob_get_level();
for ($i = 0; $i < $levels; $i++){
$final .= ob_get_clean();
}
echo apply_filters(\'final_output\', $final);
}, 0);
add_filter(\'final_output\', function($output) {
if ( is_admin() ) {
return;
}
$after_body = apply_filters(\'after_body\',\'\');
$output = preg_replace("/(\\<body.*\\>)/", "$1".$after_body, $output);
return $output;
});
add_filter(\'after_body\',function($after_body){
$after_body.=\'<div class="content">My Content</div>\';
return $after_body;
});
前两个过滤器“shutdown”和“final\\u output”是核心功能。可能是插件的一部分。创建后,您可以使用新after_body 筛选以将所需内容添加到after body.在本例中,我添加了一个简单的div,结果如下:
<body><div class="content">My Content</div>
同样有趣的是,使用这个正则表达式,你不必担心会损坏体内的东西。例如,一个类或任何其他东西我在网上找不到任何有效的例子,但我找到了一个解决方案,我希望它能帮助任何人。
jQuery(document).ready( function($) {
$(\'body\').prepend(\'<h1>Hello world</h1>\');
});
https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag
如果您使用的是StudioPress的Genesis,那么您可以使用一个钩子,就像我用于facebook插件的钩子一样:
add_action( \'genesis_before\', \'fn_AddFacebook\' ); function fn_AddFacebook(){ $script=\' (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.8"; fjs.parentNode.insertBefore(js, fjs); }(document, \\\'script\\\', \\\'facebook-jssdk\\\'));\'; echo $script; }这似乎对我有用。它本质上与添加自己的钩子完全相同,比如#1答案(我同意这是最好的)。
然而如果你像我一样,使用客户挑选的任何模板来拼凑网站,我不喜欢这样添加我自己的挂钩。我把所有的东西都保存在一个单独的目录中,并将其链接到函数。php。因此,我将使用jquery解决方案在加载后将其添加到dom中。
然而,我测试了Ralf912的输出缓冲区思想。那很酷。我想说的是,如果您需要确保代码在同一页上正确执行,并且它必须100%存在,并且您不想弄乱模板,那么这是一个好主意。
Wordpress 5.2.0引入了wp_body_open
挂钩(详见WordPress codex)
// Add code after opening body tag.
add_action( \'wp_body_open\', \'wpdoc_add_custom_body_open_code\' );
function wpdoc_add_custom_body_open_code() {
echo \'<!-- custom code -->\';
}
您可以创建一个基于JavaScript并使用prependTo
以便在起始正文标记的正后方放置标记。Check this out 供参考。
是的,很简单:
add_action( \'init\', \'test_start_buffer\', 0, 0 );
function test_start_buffer(){
ob_start( \'test_get_buffer\' );
}
function test_get_buffer( $buffer){
return preg_replace( \'#<body.+>#\', \'<body>\', $buffer);
}
第一个函数将为输出缓冲注册回调。第二个函数是回调函数,它将修改并返回HTML。请阅读PHP manual output bufferuing 了解更多信息。我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴