Buka Thickbox dengan konten melalui AJAX

11

Saya menambahkan tombol kustom ke editor TinyMCE, dan saya ingin membuka Thickbox WP ketika saya mengkliknya.

Bagaimana saya bisa membuatnya sehingga tb_show()fungsinya memuat konten yang saya inginkan dengan ajax?

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

Berikut beberapa kode plugin editor yang saya gunakan:

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

Jadi OpenMyThickboxfungsi javascript harus melakukan apa yang saya inginkan:

function OpenMyThickbox(tag){
  tb_show(tag, '...'); // <- how to load content trough ajax here ?
}
onetrickpony
sumber
gunakan admin_url ('admin-ajax.php'); untuk url
Bainternet
Saya mendapatkan halaman kosong. bahkan jika saya masuk ke google.com
onetrickpony

Jawaban:

6

Parameter kedua tb_showadalah URL, jadi Anda ingin menggunakan sesuatu seperti ..

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

Saya kira Anda harus melewati tindakan dan setiap vars permintaan tambahan secara manual (sesuai di atas), jika tidak permintaan Anda hanya untuk admin-ajax.php, ketika apa yang Anda cari adalah sesuatu di sepanjang baris ... admin-ajax.php?action=getTheContent&someothervar=someothervalue, maka add_query_argpenggunaan di atas. .

Untuk klarifikasi:

Panggilan berikut ke add_query_arg...

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

Setara dengan dan akan menghasilkan ...

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

Namun!

Setelah menjelaskan kepada diri sendiri, saya menyadari bahwa kami tidak menginginkan URL absolut dan karenanya tidak perlu menelepon ke admin_urlsana. Seharusnya kodenya.

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

Jadi URL yang dihasilkan terlihat seperti ini ..

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

Fungsi yang dirujuk dalam contoh kode di atas:

t31os
sumber
Bukankah itu $_get['action']karena pencarian ajax WordPress $_post['action']? atau saya salah?
Bainternet
Ini akan menjadi $_POSTatau $_REQUESTdi dalam panggilan balik ajax biasanya, kecuali jika Anda secara eksplisit mengatur fungsi permintaan ajax Anda untuk digunakan getsebagai gantinya, dalam konteks panggilan kotak tebal, kami menggunakan string kueri, yang masih akan muncul di $_REQUEST(karena yang biasanya memegang keduanya $_GETdan $_POST) ..
t31os
Tidak, yang saya tanyakan adalah apakah saya menggunakan add_query_argargs yang ditambahkan akan dikirim sebagai posting atau dapatkan?
Bainternet
Tidak juga, add_query_argmenambahkan string (dari url) dengan parameter kueri, itu tidak melakukan pengiriman, jadi saya tidak yakin saya mengerti pertanyaan Anda ..
t31os
Diperbarui jawaban saya ..
t31os
3

Mengacaukan javascript dan PHP tidak terlalu pintar. Jawaban ini hanya membingungkan.

tb_show adalah javascript add_query_arg adalah PHP

jadi solusi ini hanya valid dalam PHP dan kode yang tepat adalah

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

Dan dalam javascript sama sekali tidak valid karena kita tidak bisa menggunakan add_query_arg

bayen
sumber
Di mana itu berbeda dari solusi selain dari itu memiliki <?php ?>tag di dalamnya? Jika hanya itu yang ingin Anda tunjukkan, silakan edit solusi untuk memperbaikinya. Tidak perlu menambahkan jawaban terpisah untuk menjelaskan apa yang salah dengan jawaban lain. Itu sebabnya suntingan komunitas dihargai.
kaiser
@kaiser Suntingan yang mengubah arti kiriman biasanya tidak diterima. Sebagai jawaban terpisah ini tidak apa-apa.
fuxia
@toscho Dan bagaimana tepatnya ini mengubah artinya ? Saya sedang memperbaiki atau menambahkan bit yang hilang .
kaiser
Bayen benar untuk menunjukkan kesalahan di sini, saya mencampur PHP dan Javascript, saya benar-benar harus melihatnya lebih cepat. Saya telah membuat perubahan yang diperlukan untuk jawaban saya, dan terima kasih atas umpan balik bayen (saya ingin tahu kapan saya membuat kesalahan).
t31os