2010-08-27 8 views
15

Ich habe Probleme, den richtigen Haken für mein Plugin zu verwenden. Was ich versuche, ist eine Nachricht an den Anfang jeder Seite hinzuzufügen, indem mein Plugin eine Funktion hinzufügt. Was ist der beste Haken? Ich möchte Inhalte direkt nach dem Tag <body> einfügen.WordPress-Hook direkt nach Body-Tag

EDIT: Ich weiß, es 3 Jahre später ist nun aber hier ist ein trac Ticket für alle Interessierten: http://core.trac.wordpress.org/ticket/12563

+0

Does diese Hilfe? http://www.maltpress.co.uk/2010/10/05/wordpress-injecting-code-after-the-body-tag-for-plugins/ – jnthnclrk

+0

@helbetica schlug vor, dass dieser Link http: // hookr helfen kann. io/ –

Antwort

10

Das irgendwie schwer ... Die meisten Themen haben noch keine Haken in diesem Bereich. Sie könnten eine JavaScript/HTML-Lösung in wp_footer haken und es oben auf der Seite anzeigen ... eine Art, wie Stack Overflow es tut, oder wie Twitter ihre Benachrichtigungen macht.

Dies ist die beste Referenz für alle in Wordpress enthalten Haken: http://adambrown.info/p/wp_hooks/

+0

Auch irgendwelche Vorschläge für gute (GPL) Skripte, die dies erreichen? – BandonRandon

29

Alternativ, wenn Sie das Thema selbst erstellen und/oder modifizieren, können Sie eine Aktion erstellen, können Sie sich do_action Funktion Wordpress . Dies ist auch, wie sie ihre anderen Haken erstellen. Also im Grunde in Ihrem Thema, würden Sie gehen, wohin Sie wollen, direkt nach dem <body>-Tag, und so etwas wie:

do_action('after_body'); 

Sie auch Argumente für die Aktion Rückruf passieren können, finden Sie in der verlinkten Dokumentation für weitere Informationen.

Dann danach würden Sie einfach die add_action Funktion verwenden, um sich daran zu hängen.

add_action('after_body', 'my_callback'); 

Hoffe, dass hilft. Entschuldigung, wenn ich falsch verstanden habe.

+0

Das Konzept macht Sinn Das Problem ist, ich versuche, eine optionale Benachrichtigung oben auf der Seite eines beliebigen Themas in WordPress anzuzeigen. – BandonRandon

1

In diesem Szenario i tun, was ist: Verwenden Sie JQuery anhängen oder prepend Dinge:

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

+0

Was ist, wenn Sie nach dem Body-Tag mehr Javascript laden möchten? wie facebook js sdk? – RicardoE

0

ich jede Arbeitsbeispiel nicht online finden konnte, aber ich eine Lösung, und ich hoffe, dass es helfen könnte jemand. Es ist ziemlich einfach, einfach jquery hinzufügen und tun, was Sie wollen. Das folgende Beispiel könnte jedem helfen.

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

ist die Website-URL https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

Mit Hilfe der oben genannten Antwort, ich ein Plugin gemacht haben, die Inhalte nach dem Body-Tag direkt hinzufügt. Hier ist der Code Beispiel:

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

}); 

Das Erstaunlichste ist, dass ich weiß nicht, wie ich den obigen Code auf einfache Art und Weise geschehen, die Daten dynamisch direkt nach dem Body-Tag ziehen. Ich hoffe meine Antwort wird jemandem helfen und eine bessere Idee geben. Live arbeiten Beispiel: http://codecanyon.net/item/woocommerce-coupon-scratch-discount/9235287

3

Ich suchte im Internet nach Antworten auf die gleiche Frage, aber nichts gefunden. Ich habe es herausgefunden, um es zu umgehen. Mein Plugin infinite Ad Pay basiert auf dieser Methode.

Sie benötigen zwei Haken wp_head und wp_footer Haken


 

 
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

individuelle Haken zu schaffen, ist wirklich einfach in Wordpress. in header.php (oder überall können Sie einen Haken benötigen) finden:

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

und es machen:

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

Das ist unser Haken ist, jetzt wollen wir es funktioniert. In functions.php add:

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

Jetzt Haken bereit ist, zu verwenden, einfach alle Aktionen fügen Sie in functions.php benötigen:

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

oder Javascript (Tracking-Code usw. - dies aber nicht der perfekte Weg ist, Es ist eine bessere Methode, JavaScript aus .js-Dateien zu laden, aber es ist definitiv besser als Javascript direkt zu den Vorlagendateien hinzuzufügen):

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

Ein sehr, sehr, sehr schmutzig Lösung wäre:

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

In der Tat schmutzig! Netter Trick mit dem 'PHP_INT_MAX' - das ist ein wichtiger Teil dieser Lösung. Deine Klasse MUSS die letzte sein, sonst könnte das katastrophal sein! –

Verwandte Themen