問題描述

嘗試將 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。