问题描述

尝试将 Dropbox 的 drop in chooser API 整合到我正在写的插件时遇到这种情况。

API 文档指示您将以下 script 标记放置在文件的顶部:

<script type="text/javascript" src="https://www.dropbox.com/static/api/1/dropins.js" id="dropboxjs" data-app-key="MY_APP_KEY"></script>

所有的罚款都很好,而且当我直接将其粘贴到管理部分中调用的页面时,它实际上是有效的。但是,我想使用一些变体的 wp_register_script(), wp_enqueue_script() 和 wp_localize_script() 来传递必要的 ID 和 data-app-key 。

我已经尝试了几个不同的变体:

add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_js() {
    wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
    wp_enqueue_script('dropbox.js');
    wp_localize_script('dropbox.js','dropboxdata',array('id'=>"dropboxjs",'data-app-key'=>"MY_APP_KEY"));
}

和:

add_action('admin_enqueue_scripts', 'add_dropbox_stuff');
function add_dropbox_stuff() {
        wp_register_script('dropbox.js','https://www.dropbox.com/static/api/1/dropins.js');
        wp_enqueue_script('dropbox.js');
        wp_localize_script('dropbox.js','dropboxdata',array(array('id'=>"dropboxjs"),array('data-app-key'=>"MY_APP_KEY")));
    }

MY_APP_KEY 被替换为我的代码中相应的应用程序键。会感谢任何方向。谢谢。

编辑:也尝试用一些 jquery 做,但没有用。在文档加载和文档准备时尝试。我得到一个 {“error”:「无效的 app_key」} 返回。

$('script[src="https://www.dropbox.com/static/api/1/dropins.js?ver=3.6"]').attr('id','dropboxjs').attr('data-multiselect','true').attr('data-app-key','MY_APP_KEY');

最佳解决方案

您可以尝试使用 script_loader_src 过滤器挂钩,例如:

add_filter('script_loader_src','add_id_to_script',10,2);
function add_id_to_script($src, $handle){
    if ($handle != 'dropbox.js')
            return $src;
    return $src."' id='dropboxjs' data-app-key='MY_APP_KEY";
}

更新

我只是想出了自己的 src 是由 esc_url 逃脱,所以再看一点,我发现 clean_url 过滤器,你可以用它来返回值与你的 id 和应用程序的关键数据:

add_filter('clean_url','unclean_url',10,3);
function unclean_url( $good_protocol_url, $original_url, $_context){
    if (false !== strpos($original_url, 'data-app-key')){
      remove_filter('clean_url','unclean_url',10,3);
      $url_parts = parse_url($good_protocol_url);
      return $url_parts['scheme'] . '://' . $url_parts['host'] . $url_parts['path'] . "' id='dropboxjs' data-app-key='MY_APP_KEY";
    }
    return $good_protocol_url;
}

参考文献

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