it-swarm.asia

Vücuda yük ekleme

Şu anda bir Google Earth Turu'nu bir kısa kodla WP yazı/sayfasına yerleştirecek bir eklenti geliştirmeye çalışıyorum.

Karşılaştığım sorun şu ki turun yüklenebilmesi için <body> etiketine bir onload="init()" eklemeliyim.

Belirli bir şablon dosyasını değiştirebilirim ancak bu sürüm yayınlanacağı için dinamik olarak bir kanca ile eklemem gerekiyor. Herhangi bir fikir?

5
Norcross

Biraz daha kazı yaptı ve çalışmasını sağlamak için 'daha iyi' bir yol buldu (Google, onların lanet Dünya Turlarını gömülmesini zorlaştırıyor ve gadget'ları çalışmıyor).

Kısa kod ve özel alanın bir kombinasyonunu kullanan bir eklentisi yaptım.

0
Norcross

Ve işte bir jQuery çözümü (Mike ilk yorumunda önerildiği gibi).

function add_my_scripts() {
    wp_enqueue_script('jquery');
    wp_enqueue_script('my_init_script', SCRIPTSRC, 'jquery', '1.0');
}
add_action('init', 'add_my_scripts');

Sonra eklentinize şunu yapan bir komut dosyası ekleyin:

jQuery.noConflict();

jQuery(document).ready(function($) {
    init();
}

Bu, jQuery'yi çakışma modunda (zaten değilse) başlatacak ve belge hazır olduğunda init() yöntemine bir çağrı ekleyecektir. body onready() işlevinden daha güvenli bir yöntemdir çünkü onready() işlevi yalnızca bir şeyi çağırabilir ... böylece başka hiç kimse buna bir şey bağlayamaz veya özel komut dosyası ekleyemez. Eklentinizi mümkün olduğunca göze çarpmayan hale getirmek daha iyidir, böylece diğer eklentiler karışmaz veya tam tersi olmaz.

9
EAMann

İşte bir yaklaşım. Kanıtınıza add_action() çağrısını ekleyeceksiniz, inanıyorum. İçerdiğim JavaScript init işlevinin önceden tanımlanmış olduğunu varsayar. Olmadıysa, o zaman bu başarısız olur, ancak senaryoyu dahil etmek sizi doğru anlıyorsam zaten çözdüğünüz bir problem gibi gözükür. wp_foot 'a eklemeniz gerekmediğini unutmayın, wp_head' a kolayca ekleyebilirsiniz:

<?php

function mypluginprefix_onload_init() { ?>
<script language="text/javascript">
// check for the standards-compliant way to add onload events
if ( typeof(window.addEventListener) !== 'undefined' )
    window.addEventListener( "load", init, false );
// or the older msie nonstandard way
else if ( typeof(window.attachEvent) !== 'undefined' ) {
    window.attachEvent( "onload", init );
}
</script>
<?php }

// this goes in your hook
add_action('wp_foot', 'mypluginprefix_onload_event');
?>
4
artlung

Bunu jQuery ile yapma potansiyelini görmezden gelmek, yapabileceğiniz bir şeytemplate_include FILTRESINI KANCALAMAK VE GERI ÇAĞRI ILE ob_start()kullanmaktır. Daha sonra geri çağrınız '<body' üzerinde bir dize araması yapabilir ve aşağıdaki kodda olduğu gibi '<body onload="init()"' ile değiştirebilir. Doğrudan eklentinize ekleyebilmeniz gerekir; eklentinizin kendi adlandırma kurallarına uyması için adları değiştirdiğinizden emin olun:

<?php
add_filter('template_include','start_buffer_capture',1);
function start_buffer_capture($template) {
  ob_start('end_buffer_capture');  // Start Page Buffer
  return $template;
}
function end_buffer_capture($buffer) {
  return str_replace('<body','<body onload="init()"',$buffer);
}

Unutmayın, yukarıdaki kod henüz siz olmasaydım tamamen sağlamdı. Sorunuzu cevaplamak için bir araya getirdiğimden beri tüm Edge vakalarını ele alacağından şüpheliyim, ancak minimal olarak size normal davayı nasıl başaracağınızı gösteriyor, ve sonra bazı kullanım durumları testinde hepsini ele alacağınızdan eminim önemli Edge vakaları ('<BODY' büyük harf ise ne olur?)

2
MikeSchinkel

JQuery ile veya jQuery olmadan sayfa yüküne dinamik olarak geri arama eklemek için bazı JavaScript:

function add_onload() {
    ?>
    <script type="text/javascript">
    my_onload_callback = function() { alert('Hello!'); }; // test function

    if( typeof jQuery == "function" ) { 
        jQuery(my_onload_callback); // document.ready
    } else {
        document.getElementsByTagName('body')[0].onload = my_onload_callback; // body.onload
    }
    </script>
    <?php
}
add_action( 'wp_footer', 'add_onload' );

Sizin durumunuzda, my_onload_callback öğelerini init metodunuzla değiştirirsiniz.

1
Annika Backstrom