web-dev-qa-db-ja.com

コンテンツを含むチェックボックスを開く AJAX

TinyMCEエディタにカスタムボタンを追加し、それをクリックしたときにWPのThickboxを開きたいです。

tb_show()関数がajaxで欲しいコンテンツをロードするようにするにはどうすればいいですか?

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

これが私が使っているエディタプラグインコードの一部です:

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

それでOpenMyThickbox javascript関数は私が望むことをするべきです:

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

tb_showの2番目のパラメータはURLなので、あなたは..のようなものを使いたいでしょう。

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

アクションと追加のクエリ変数を手動で(上記のように)渡す必要があると思いますが、それ以外の要求は単にadmin-ajax.phpに対するものです。探しているものが... admin-ajax.php?action=getTheContent&someothervar=someothervalueに沿ったものである場合、add_query_arg上記の使い方.

説明のために:

次のadd_query_argへの呼び出し...

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

と同等であり、生成されます...

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

しかしながら!

私は自分自身を説明したので、私たちは絶対URLが欲しくないので、そこにadmin_urlを呼び出す必要がないことに気づきました。代わりにコードがあります。

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

そのため、結果のURLは次のようになります。

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

上記のコードサンプルで参照されている関数:

6
t31os

JavascriptとPHPをめちゃくちゃにすることはそれほど賢いことではありません。この答えは混乱するだけです。

tb_showはjavascriptですadd_query_argはPHPです

したがって、この解決策はPHPでのみ有効であり、適切なコードは

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

JavaScriptではadd_query_argを使用できないため、まったく無効です。

3
bayen