问题描述
我向 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
的第二个参数是 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
以上代码示例中引用的函数:
-
添加查询 Arg http://codex.wordpress.org/Function_Reference/add_query_arg
-
管理网址 http://codex.wordpress.org/Function_Reference/admin_url
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。