2010-08-27 14 views
15

Tengo problemas para encontrar el gancho adecuado para usar en mi complemento. Lo que trato de hacer es agregar un mensaje a la parte superior de cada página haciendo que mi complemento agregue una función. ¿Cuál es el mejor gancho para usar? Quiero insertar contenido justo después de la etiqueta <body>.WordPress se engancha directamente después de la etiqueta del cuerpo

EDIT: Sé que es 3 años más tarde ahora, pero aquí es un billete trac para cualquier persona que esté interesado: http://core.trac.wordpress.org/ticket/12563

+0

¿Le sirve de ayuda? http://www.maltpress.co.uk/2010/10/05/wordpress-injecting-code-after-the-body-tag-for-plugins/ – jnthnclrk

+0

@helbetica sugirió que este enlace puede ayudar a http: // hookr. io/ –

Respuesta

10

Eso es un poco difícil ... La mayoría de los temas no tienen ningún gancho en esa zona. Podría enganchar una solución javascript/html en wp_footer y mostrarla en la parte superior de la página ... más o menos como lo hace Stack Overflow, o cómo Twitter hace sus notificaciones.

Ésta es la mejor referencia para todos los ganchos incluidos en WordPress: http://adambrown.info/p/wp_hooks/

+0

¿Alguna sugerencia de scripts buenos (GPL) que logren esto? – BandonRandon

29

Alternativamente, si va a crear el tema mismo y/o puede modificarlo, puede crear una acción por sí mismo utilizando la función de WordPress do_action . Esta es también la forma en que crean sus otros ganchos. Así que, básicamente, en su tema, que iría en la que desea, justo después de la etiqueta <body>, y hacer algo como:

do_action('after_body'); 

También puede pasar argumentos a la devolución de llamada de acción, consulte la documentación vinculada a la información.

Luego, simplemente usará la función add_action para engancharlo.

add_action('after_body', 'my_callback'); 

Espero que ayude. Lo siento si no entendí bien.

+0

El concepto tiene sentido, el problema es que estoy tratando de mostrar una notificación opcional en la parte superior de la página de cualquier tema dentro de WordPress. – BandonRandon

1

En este escenario, lo que hago es: usar jQuery para anexar o cosas Prefijo:

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

+0

¿Qué sucede si desea cargar más javascript después de la etiqueta de cuerpo? como facebook js sdk? – RicardoE

0

no he podido encontrar ningún ejemplo de trabajo en línea, pero me dio una solución y espero que podría ayudar nadie. Es bastante simple, simplemente agrega jquery y haz lo que quieras. El siguiente ejemplo podría ayudar a cualquiera.

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

Aquí es la URL del sitio web https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

Con la ayuda de la respuesta anterior, he hecho un plugin que añade directamente el contenido después de la etiqueta del cuerpo. Aquí es el código de ejemplo:

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>'); 

}); 

Lo más sorprendente es que no sé cómo he hecho el código anterior de una manera fácil, tirando de los datos dinámica apropiada después de la etiqueta del cuerpo. Espero que mi respuesta ayude a alguien y dé una mejor idea. Ejemplo de trabajo en vivo: http://codecanyon.net/item/woocommerce-coupon-scratch-discount/9235287

3

Busqué en Internet las respuestas a la misma pregunta pero no encontré nada. Me di cuenta de que había que evitarlo. Mi complemento infinite Ad Pay se basa en este método.

Se necesitan dos ganchos wp_head y wp_footer gancho


 

 
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

Creación de gancho costumbre es muy fácil en Wordpress. en header.php (o en cualquier lugar es posible que tenga un gancho) localice:

<body <?php body_class(); ?>> 
<div id="body-container"> 

y hacerla:

<body <?php body_class(); ?>> 
<?php body_begin(); ?> 
<div id="body-container"> 

Ese es nuestro gancho, ahora vamos a hacer que funcione. En functions.php complemento:

function body_begin() { 
do_action('body_begin'); 
} 

Ahora gancho está listo para usar, basta con añadir cualquier acción que necesita en functions.php:

function my_function() { 
/* php code goes here */ 
} 
add_action('body_begin', 'my_function'); 

o Javascript (código de seguimiento, etc - esto no es la manera perfecta sin embargo, es una mejor práctica cargar javascript desde archivos .js, pero definitivamente es mejor que agregar javascript directamente a archivos de plantilla):

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

Una solución muy, muy, muy sucia sería:

/* 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

¡Sucio de hecho! Buen truco con el 'PHP_INT_MAX': esa es una parte clave de esta solución. ¡Tu clase DEBE ser la última, de lo contrario, esto podría ser desastroso! –

Cuestiones relacionadas