如何在<BODY>之后插入内容

时间:2012-11-20 作者:Nippysaurus

我想在<body> 标签

是否可以只使用WordPress挂钩?

7 个回复
最合适的回答,由SO网友:kaiser 整理而成

只需将自定义挂钩添加到模板:

<body>
<?php do_action( \'wpse73370_custom_hook\' ); ?>

SO网友:Pablo S G Pacheco

之后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>
同样有趣的是,使用这个正则表达式,你不必担心会损坏体内的东西。例如,一个类或任何其他东西

SO网友:Sabir Abdul Gafoor Shaikh

我在网上找不到任何有效的例子,但我找到了一个解决方案,我希望它能帮助任何人。

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

https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

SO网友:Daniel Morris

如果您使用的是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%存在,并且您不想弄乱模板,那么这是一个好主意。

SO网友:katiedev

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 -->\';
}

SO网友:Mario Peshev

您可以创建一个基于JavaScript并使用prependTo 以便在起始正文标记的正后方放置标记。Check this out 供参考。

SO网友:Ralf912

是的,很简单:

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 了解更多信息。

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴