2010-08-27 36 views
15

Tôi đang gặp sự cố khi tìm móc phù hợp để sử dụng cho plugin của mình. Những gì tôi đang cố gắng làm là thêm thông điệp vào đầu mỗi trang bằng cách thêm plugin của tôi vào một chức năng. Móc tốt nhất để sử dụng là gì? Tôi muốn chèn nội dung ngay sau thẻ <body>.WordPress hook trực tiếp sau thẻ body

EDIT: Tôi biết đó là 3 năm sau bây giờ nhưng đây là một vé trac cho bất cứ ai quan tâm: http://core.trac.wordpress.org/ticket/12563

+0

Điều này có hữu ích không? http://www.maltpress.co.uk/2010/10/05/wordpress-injecting-code-after-the-body-tag-for-plugins/ – jnthnclrk

+0

@helbetica đề xuất liên kết này có thể giúp http: // hookr. io/ –

Trả lời

10

Đó là kinda khó khăn ... Hầu hết các chủ đề không có bất kỳ móc trong khu vực đó. Bạn có thể móc một giải pháp javascript/html vào wp_footer và hiển thị nó ở đầu trang ... sắp xếp cách Stack Overflow thực hiện hoặc cách Twitter thực hiện thông báo của họ.

Đây là tài liệu tham khảo tốt nhất cho tất cả các móc bao gồm trong WordPress: http://adambrown.info/p/wp_hooks/

+0

Ngoài ra có bất kỳ đề xuất nào về kịch bản tốt (GPL) sẽ thực hiện việc này không? – BandonRandon

29

Ngoài ra, nếu bạn đang tạo chủ đề bản thân và/hoặc có thể sửa đổi nó, bạn có thể tạo một hành động bản thân sử dụng do_action chức năng WordPress' . Đây cũng là cách họ tạo ra các móc khác của họ. Vì vậy, về cơ bản trong chủ đề của bạn, bạn sẽ đi nơi bạn muốn, ngay sau thẻ <body>, và làm điều gì đó như:

do_action('after_body'); 

Bạn cũng có thể vượt qua đối số để gọi lại hành động, hãy xem tài liệu liên quan để biết thông tin.

Sau đó, bạn chỉ cần sử dụng hàm add_action để móc vào nó.

add_action('after_body', 'my_callback'); 

Hy vọng điều đó sẽ hữu ích. Xin lỗi nếu tôi hiểu lầm.

+0

Khái niệm này có ý nghĩa cho vấn đề là tôi đang cố gắng hiển thị thông báo tùy chọn ở đầu trang của bất kỳ chủ đề nào bên trong WordPress. – BandonRandon

1

Trong kịch bản này, những gì tôi làm là: Sử dụng jQuery để thêm hoặc những thứ thêm vào trước:

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

+0

nếu bạn muốn tải thêm javascript sau thẻ body? như facebook js sdk? – RicardoE

0

tôi không thể tìm thấy bất kỳ ví dụ làm việc trực tuyến, nhưng tôi có một giải pháp và tôi hy vọng nó có thể giúp bất kỳ ai. Nó khá đơn giản, chỉ cần thêm jquery và làm bất cứ điều gì bạn muốn. Ví dụ dưới đây có thể giúp bất cứ ai.

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

Đây là url trang web https://wordpress.org/support/topic/add_action-right-after-ltbodygt-tag

Với sự giúp đỡ của các câu trả lời ở trên, tôi đã thực hiện một plugin mà trực tiếp cho biết thêm nội dung sau thẻ body. Đây là đoạn mã mẫu:

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

}); 

Điều tuyệt vời nhất là tôi không biết làm thế nào tôi đã làm các mã trên một cách dễ dàng, kéo dữ liệu động ngay sau thẻ body. Tôi hy vọng câu trả lời của tôi sẽ giúp một ai đó và đưa ra một ý tưởng tốt hơn. Ví dụ làm việc trực tiếp: http://codecanyon.net/item/woocommerce-coupon-scratch-discount/9235287

3

Tôi đã tìm kiếm trên Internet các câu trả lời cho cùng một câu hỏi nhưng không tìm thấy gì. Tôi đã tìm ra cách để làm việc xung quanh nó. Plugin của tôi infinite Ad Pay được dựa trên phương pháp này.

Bạn cần hai móc wp_headwp_footer móc


 

 
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

Tạo móc tùy chỉnh là thực sự dễ dàng trong Wordpress. trong header.php (hoặc bất cứ nơi nào bạn có thể cần một cái móc) xác định vị trí:

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

và làm cho nó:

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

Đó là móc của chúng tôi, bây giờ chúng ta hãy làm cho nó hoạt động. Trong functions.php add:

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

Bây giờ móc đã sẵn sàng để sử dụng, chỉ cần thêm bất kỳ hành động mà bạn cần trong functions.php:

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

hoặc javascript (mã theo dõi vv - đây không phải là cách hoàn hảo mặc dù, nó là một thực hành tốt hơn để tải javascript từ các tệp .js, nhưng nó chắc chắn là tốt hơn so với việc thêm javascript trực tiếp vào các tệp mẫu):

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

Một giải pháp rất, rất, rất bẩn sẽ là:

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

Thực sự bẩn thỉu! Bí quyết tuyệt vời với 'PHP_INT_MAX' - đó là một phần quan trọng của giải pháp này. Lớp học của bạn PHẢI là lớp cuối cùng, nếu không điều này có thể là thảm họa! –

Các vấn đề liên quan