2010-08-27 5 views
15

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

EDIT: Я знаю, что через 3 года в настоящее время, но вот билет ПРОФ для тех, кто интересуется: http://core.trac.wordpress.org/ticket/12563

+0

Помогает ли это? http://www.maltpress.co.uk/2010/10/05/wordpress-injecting-code-after-the-body-tag-for-plugins/ – jnthnclrk

+0

@helbetica предположил, что эта ссылка может помочь http: // hookr. io/ –

ответ

10

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

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

+0

Также любые предложения о хороших (GPL) скриптах, которые это сделают? – BandonRandon

29

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

do_action('after_body'); 

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

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

add_action('after_body', 'my_callback'); 

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

+0

Концепция имеет смысл, проблема заключается в том, что я пытаюсь отобразить необязательное уведомление в верхней части страницы любой темы внутри WordPress. – BandonRandon

1

В этом случае, что я делаю это: использование Jquery для добавления или PREPEND вещи:

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

+0

Что делать, если вы хотите загрузить больше javascript после тега body? как facebook js sdk? – RicardoE

0

Я не смог найти какой-либо рабочий пример в Интернете, но я получил одно решение, и я надеюсь, что это могло бы помочь кто угодно. Это довольно просто, просто добавьте 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>'); 

}); 

Самое удивительное в том, что я не знаю, как я сделал выше код простым способом, натягивая данных динамического сразу после тега тела. Надеюсь, мой ответ поможет кому-то и даст лучшую идею. Рабочий пример: http://codecanyon.net/item/woocommerce-coupon-scratch-discount/9235287

3

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

10

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

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

/* 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; 
} 
+0

Грязный действительно! Хороший трюк с «PHP_INT_MAX» - это ключевая часть этого решения. Ваш класс ДОЛЖЕН быть последним, иначе это может быть катастрофой! –

Смежные вопросы