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 ?
}
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
上記のコードサンプルで参照されている関数:
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を使用できないため、まったく無効です。