Захват WordPress непосредственно после тега body

У меня проблемы с поиском подходящего крючка для моего плагина. Я пытаюсь добавить сообщение в начало каждой страницы, добавив в мой плагин функцию. Какой лучший крючок для использования? Я хочу вставить содержимое сразу после <body>.

РЕДАКТИРОВАТЬ: Я знаю это через 3 года, но вот билет для любого интересующегося: http://core.trac.wordpress.org/ticket/12563

Ответы

Ответ 1

Что-то трудное... В большинстве тем нет никаких крючков в этой области. Вы можете подключить javascript/html-решение к wp_footer и отобразить его в верхней части страницы... как это делает Qaru или как Twitter делает свои уведомления.

Это лучшая ссылка для всех крючков, включенных в WordPress: http://adambrown.info/p/wp_hooks/

Ответ 2

В качестве альтернативы, если вы сами создаете тему и/или можете ее изменить, вы можете сами создать действие, используя WordPress do_action функция. Это также то, как они создают свои другие крючки. Таким образом, в основном в вашей теме вы бы отправились туда, куда хотите, сразу после тега <body> и выполните следующее:

do_action('after_body');

Вы также можете передавать аргументы для обратного вызова действия, см. связанную документацию для информации.

Затем после этого вы просто используете функцию add_action, чтобы подключиться к ней.

add_action('after_body', 'my_callback');

Надеюсь, что это поможет. Извините, если я неправильно понял.

Ответ 3

Создание пользовательского подключения в 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 (код отслеживания и т.д. - это не лучший способ, но лучше всего загружать javascript из .js файлов, но это определенно лучше, чем добавлять javascript непосредственно к файлам шаблонов):

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

Ответ 4

Я искал в Интернете ответы на один и тот же вопрос, но ничего не нашел. Я разобрался, чтобы обойти это. Мой плагин бесконечный 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

Ответ 5

В этом случае я использую JQuery для добавления или добавления файлов:

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

Ответ 6

Очень, очень, очень грязное решение:

/* Insert tracking code or others directly after BODY opens */
add_filter('body_class', 'wps_add_tracking_body', PHP_INT_MAX); // make sure, that 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;
}

Ответ 7

Я не мог найти рабочий пример в Интернете, но у меня есть одно решение, и я надеюсь, что это может помочь кому угодно. Это довольно просто, просто добавьте jquery и сделайте все, что захотите. Приведенный ниже пример может помочь любому.

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

Вот URL веб-сайта 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

Ответ 8

WordPress теперь решил эту проблему, добавив хук wp_body в версии 5.2. Теперь вы можете подключить или вставить в тело HTML, выполнив:

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

Размещение этого в вашем файле functions.php в вашей теме может быть лучшим для большинства основных пользователей.

Ответ 9

Изменения, изменения, изменения. Таким образом, похоже, что с марта 2019 года (из 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>.