WordPress хук сразу после тега body - PullRequest
23 голосов
/ 27 августа 2010

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

РЕДАКТИРОВАТЬ: я знаю, что это спустя 3 года, но вот билет для любого интересующегося:

Ответы [ 8 ]

37 голосов
/ 27 августа 2010

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

do_action('after_body');

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

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

add_action('after_body', 'my_callback');

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

12 голосов
/ 05 июля 2015

Создание пользовательских хуков действительно легко в 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');
}

Теперь ловушка готова к использованию, просто добавьте все необходимые действия в 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');
12 голосов
/ 27 августа 2010

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

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

4 голосов
/ 05 декабря 2014

Я искал в Интернете ответы на тот же вопрос, но ничего не нашел.Я разобрался, чтобы обойти это.Мой плагин бесконечный Ad Pay основан на этом методе.

Вам нужны два крючка wp_head и wp_footer hook

 

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
1 голос
/ 21 июля 2017

Очень, очень, очень грязное решение будет:

/* 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;
}
1 голос
/ 28 августа 2010

В этом сценарии я использую Jquery для добавления или добавления элементов:

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

0 голосов
/ 21 мая 2019

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

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

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

0 голосов
/ 05 октября 2014

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

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

Вот URL-адрес веб-сайта https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

С помощью приведенного выше ответа я создал плагин, который непосредственно добавляет контент после телатег.Вот пример кода:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...