2010-08-27 5 views
15

Sto riscontrando problemi nel trovare l'hook corretto da utilizzare per il mio plug-in. Quello che sto cercando di fare è aggiungere un messaggio nella parte superiore di ogni pagina facendo in modo che il mio plugin aggiunga una funzione. Qual è il miglior gancio da usare? Voglio inserire il contenuto subito dopo il tag <body>.WordPress hook direttamente dopo tag body

EDIT: Lo so che è 3 anni più tardi, ma ora ecco un biglietto di trac per chiunque sia interessato: http://core.trac.wordpress.org/ticket/12563

+0

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

+0

@helbetica ha suggerito che questo collegamento può aiutare http: // hookr. io/ –

risposta

10

Questo è un po difficile ... La maggior parte dei temi non hanno alcun ganci in quella zona. È possibile agganciare una soluzione javascript/html a wp_footer e visualizzarla nella parte superiore della pagina ... in modo analogo a come Stack Overflow o in che modo Twitter fa le proprie notifiche.

Questo è il miglior riferimento per tutti i ganci inclusi in WordPress: http://adambrown.info/p/wp_hooks/

+0

Anche qualche suggerimento di buoni script (GPL) che realizzerà questo? – BandonRandon

29

In alternativa, se si sta creando il tema se stessi e/o possibile modificarlo, è possibile creare un'azione da soli, usando la funzione di WordPress' do_action . Questo è anche il modo in cui creano i loro altri ganci. Quindi, in pratica nel tema, si dovrebbe andare dove si vuole, subito dopo il tag <body>, e fare qualcosa di simile:

do_action('after_body'); 

È inoltre possibile passare degli argomenti al callback azione, consultare la documentazione legata per le informazioni.

Successivamente, è sufficiente utilizzare la funzione add_action per agganciarla.

add_action('after_body', 'my_callback'); 

Spero che questo aiuti. Scusa se ho frainteso.

+0

Il concetto ha senso il problema è che sto cercando di visualizzare una notifica opzionale nella parte superiore della pagina di qualsiasi tema all'interno di WordPress. – BandonRandon

1

In questo scenario, quello che faccio è: utilizzare jQuery per aggiungere o cose anteposta:

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

+0

cosa succede se vuoi caricare più javascript dopo il tag body? come facebook js sdk? – RicardoE

0

non ho trovato alcun esempio di lavoro on-line, ma ho ottenuto una soluzione e spero che potrebbe aiutare nessuno. È abbastanza semplice, basta aggiungere jquery e fare quello che vuoi. L'esempio seguente potrebbe aiutare chiunque.

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

Ecco il sito url https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

Con l'aiuto della risposta di cui sopra, ho fatto un plugin che aggiunge direttamente il contenuto dopo il tag body. Ecco il codice di esempio:

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

}); 

La cosa più sorprendente è che io non so come ho fatto il codice di cui sopra in modo semplice, tirando i dati dinamici a destra dopo il tag body. Spero che la mia risposta aiuti qualcuno e dia un'idea migliore. Esempio di funzionamento dal vivo: http://codecanyon.net/item/woocommerce-coupon-scratch-discount/9235287

3

Ho cercato su Internet le risposte alla stessa domanda ma non ho trovato nulla. Ho pensato di andare a lavorare intorno ad esso. Il mio plugin infinite Ad Pay si basa su questo metodo.

avete bisogno di due ganci wp_head e wp_footer gancio


 

 
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

Creazione gancio personalizzato è davvero facile in Wordpress. in header.php (o dovunque potrebbe essere necessario un gancio) individuare:

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

e renderlo:

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

Questo è il nostro gancio, ora cerchiamo di farlo funzionare. In functions.php aggiuntivo:

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

Ora gancio è pronto per l'uso, è sufficiente aggiungere qualunque azione che avete bisogno in functions.php:

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

o JavaScript (codice di monitoraggio, ecc - questo non è il modo perfetto, però, è una pratica migliore per caricare javascript da file .js, ma è decisamente meglio che aggiungere javascript direttamente ai file di modello):

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

Una soluzione molto, molto, molto sporca sarebbe:

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

Davvero sporco! Bel trucco con 'PHP_INT_MAX' - questa è una parte fondamentale di questa soluzione. La tua classe DEVE essere l'ultima, altrimenti questo potrebbe essere disastroso! –

Problemi correlati