问题描述

我向 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

以上代码示例中引用的函数:

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。