У меня возникают проблемы с поиском правильного крючка для моего плагина. То, что я пытаюсь сделать, это добавить сообщение в начало каждой страницы, добавив функцию плагина. Какой лучший крючок для использования? Я хочу вставить содержимое сразу после <body>
.
EDIT: Я знаю, что это уже 3 года спустя, но вот билет для всех, кто интересуется: http://core.trac.wordpress.org/ticket/12563
Это очень сложно … Большинство тем не имеют крючков в этой области. Вы можете подключить javascript / html-решение в wp_footer
и отобразить его в верхней части страницы … как это делает Stack Overflow или как Twitter делает свои уведомления.
Это лучшая ссылка для всех крючков, включенных в WordPress: http://adambrown.info/p/wp_hooks/
В качестве альтернативы, если вы сами создаете тему и / или можете ее изменить, вы можете самостоятельно создать действие, используя функцию do_action
WordPress. Это также то, как они создают свои другие крючки. Таким образом, в основном в вашей теме, вы должны пойти туда, куда хотите, сразу после <body>
и сделать что-то вроде:
do_action('after_body');
Вы также можете передать аргументы для обратного вызова действия, см. Связанную документацию для информации.
Затем после этого вы просто будете использовать функцию add_action
для привязки к ней.
add_action('after_body', 'my_callback');
Надеюсь, это поможет. Извините, если я неправильно понял.
Создание пользовательского крючка очень просто в 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');
Я искал в Интернете ответы на один и тот же вопрос, но ничего не нашел. Я разобрался, чтобы обойти это. Мой плагин бесконечной 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
В этом случае я использую JQuery для добавления или добавления файлов:
Я не мог найти какой-либо рабочий пример в Интернете, но у меня есть одно решение, и я надеюсь, что это может помочь кому угодно. Это довольно просто, просто добавьте 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
Очень, очень, очень грязное решение было бы:
/* 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; }