AJAX ile içerikli bir Thickbox açın


11

TinyMCE editörüne özel bir düğme ekledim ve üzerine tıkladığımda WP'nin Thickbox'ını açmak istiyorum.

tb_show()Fonksiyonun istediğim içeriği ajax ile yüklemesi için bunu nasıl yapabilirim ?

// the ajax
add_action('wp_ajax_getTheContent', 'getTheContent');
function getTheContent(){
  echo 'weqwtegeqgr'; // <- this should be displayed in the TB
  die();
}

İşte kullanıyorum editör eklenti kodlarından bazıları:

init : function(ed, url) {
  ed.addButton('do_stuff', {
    title : 'Do Stuff',
    image : url + '/icon.gif',
    onclick : function() {
        OpenMyThickbox('do_stuff');
    }
  });
...

Böylece OpenMyThickboxjavascript işlevi istediğimi yapmalı:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}

admin_url ('admin-ajax.php') kullanın; url için
Bainternet

Boş bir sayfa alıyorum. google.com
girsem

Yanıtlar:


6

İçin ikinci parametre tb_showURL'dir, bu nedenle aşağıdaki gibi bir şey kullanmak istersiniz.

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
); 
?>
tb_show(tag, '<?php echo $ajax_url; ?>' );

Sanırım eylem geçmek gerekir ve herhangi bir ek sorgu (yukarıda göre) manuel olarak değişir, aksi takdirde isteğiniz basitçe admin-ajax.php, aradığınız şey ... satırları boyunca bir şey olduğunda admin-ajax.php?action=getTheContent&someothervar=someothervalue, bu nedenle add_query_argyukarıdaki kullanım içindir. .

Netlik için:

Aşağıdaki çağrı add_query_arg...

add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    admin_url( 'admin-ajax.php' ) 
);

Eşdeğer ve üretecek ...

http://example.com/wp-admin/admin-ajax.php?action=getTheContent&query_var1=value1&query_var2=value2

Ancak!

Şimdi kendimi açıkladıktan sonra, mutlak URL'yi istemediğimizi ve bu yüzden admin_urlorada çağrıya ihtiyacımız olmadığını fark ettim . Kod bunun yerine olmalıdır.

<?php 
$ajax_url = add_query_arg( 
    array( 
        'action' => 'getTheContent', 
        'query_var1' => 'value1', 
        'query_var2' => 'value2' 
    ), 
    'admin-ajax.php'
); 
?>
tb_show(tag, '<?php echo $ajax_url; ?>'); 

Sonuçta ortaya çıkan URL şuna benzer.

admin-ajax.php?action=getTheContent&query_var1=valu1&query_var2=value2

Yukarıdaki kod örneklerinde belirtilen işlevler:


$_get['action']WordPress ajax çağrısı aradığı için bu olmayacak $_post['action']mı? yoksa yanılıyor muyum?
Bainternet

Bu olacak $_POSTya $_REQUESTiçinde bir ajax geri arama tipik olarak açıkça kullanmak için ajax isteği fonksiyonunu ayarlamak sürece getyerine, bir thickbox çağrısı bağlamında, hala gösterilmesi gereken bir sorgu dizesi kullanmak $_REQUESTgenellikle tutan çünkü (her ikisi $_GETve $_POST) ..
t31os

Hayır, add_query_argeklediğim argümanlar bir gönderi olarak gönderilecek mi yoksa alınacak mı?
Bainternet

Ne, add_query_argsorgu parametreleri ile bir dize (bir url) ekler, herhangi bir gönderme yapmaz, bu yüzden sorunuzu anladığımdan emin değilim ..
t31os 18:11

Cevabım güncellendi ..
t31os

3

Javascript ve PHP'yi karıştırmak çok akıllıca değil. Bu cevap sadece kafa karıştırıyor.

tb_show javascript add_query_arg PHP

bu yüzden bu çözüm sadece PHP için geçerlidir ve uygun kod

...
?>
tb_show(
  'whatever',
  <?php echo add_query_arg( array(
    'action' => 'getTheContent',
    'query_var1' => 'value1',
    'query_var2' => 'value2',
  ), 'admin-ajax.php'); ?>
);
<?php
...

Ve javascript'te add_query_arg kullanamadığımız için geçerli değil


Bu, <?php ?>etiketlerin içinde bulunduğu çözümden başka nereden farklıdır ? İşaret etmek istediğiniz tek şey buysa, düzeltmek için lütfen çözümü düzenleyin. Başka bir cevapta neyin yanlış olduğunu açıklamak için ayrı bir cevap eklemenize gerek yoktur. Bu yüzden topluluk düzenlemeleri takdir edilmektedir.
kaiser

@kaiser Bir gönderinin anlamını değiştiren düzenlemeler genellikle hoş karşılanmaz. Ayrı bir cevap olarak bu sorun değil.
fuxia

@toscho Peki bunun anlamı tam olarak nasıl değişiyor ? Imo düzeltiyor ya da eksik bitleri ekliyor .
kaiser

Bayen burada hatayı işaret doğru, ben PHP ve Javascript karıştırma, ben gerçekten daha erken benekli gerekir. Cevabımda gerekli değişiklikleri yaptım ve geri bildirim bayeni için teşekkürler (hata yaptığımı bilmek istiyorum).
t31os
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.