私のウェブサイトはフロントエンドで動作するカスタムフォントを取得するためにtypekitを使用しています。
これをバックエンドのエディタスタイルに入れたいのですが。しかし、どうすればよいかわかりません。 Typekitは、CSSフォントフェイスの埋め込みスニペットではなく、js埋め込みスニペットを使用します。
Tom Nowellの TinyMCEプラグインソリューション は素晴らしく動作します。 Typekitの新しい非同期コードを使用するようにJavaScriptを更新してください 。新しい非同期埋め込みコードを使用すると、403の問題が解消され、Typekit対応のTinyMCEが手間なく使用できます。
トムはすべてのコードをブログ記事にまとめました。彼はこれに全力を尽くしました、それで彼にいくつかのページビューを渡してください、そして そこに詳細を読んでください !
私はちょっとしたプラグインを追加することでこれを回避しました、それはほとんどそこにあります、しかし、それがタイプキットからフォントcssを検索しようとするとき、Imは403禁じられています:
js:
(function() {
tinymce.create('tinymce.plugins.typekit', {
init: function(ed, url) {
ed.onPreInit.add(function(ed) {
// Get the DOM document object for the IFRAME
var doc = ed.getDoc();
// Create the script we will add to the header asynchronously
var jscript = "var TypekitConfig = {\n\
kitId: '*******'\n\
};\n\
(function() {\n\
var tk = document.createElement('script');\n\
tk.src = '//use.typekit.com/' + TypekitConfig.kitId + '.js';\n\
tk.type = 'text/javascript';\n\
tk.async = 'true';\n\
tk.onload = tk.onreadystatechange = function() {\n\
var rs = this.readyState;\n\
if (rs && rs != 'complete' && rs != 'loaded') return;\n\
try { Typekit.load(TypekitConfig); } catch (e) {}\n\
};\n\
var s = document.getElementsByTagName('script')[0];\n\
s.parentNode.insertBefore(tk, s);\n\
})();";
// Create a script element and insert the TypeKit code into it
var script = doc.createElement("script");
script.type = "text/javascript";
script.appendChild(doc.createTextNode(jscript));
// Add the script to the header
doc.getElementsByTagName('head')[0].appendChild(script);
});
},
getInfo: function() {
return {
longname: 'TypeKit For TinyMCE',
author: 'Tom J Nowell',
authorurl: 'http://tomjn.com/',
infourl: 'http://Twitter.com/tarendai',
version: "1.0"
};
}
});
tinymce.PluginManager.add('typekit', tinymce.plugins.typekit);
})();
PHP
add_filter("mce_external_plugins", "tomjn_mce_external_plugins");
function tomjn_mce_external_plugins($plugin_array){
$plugin_array['typekit'] = get_template_directory_uri().'/typekit.tinymce.js';
return $plugin_array;
}
Admin用のスクリプトをエンキューすることができ、それがあなたのeditor.cssに利用可能になるはずです。
add_action( 'admin_print_scripts', 'admin_typekit' );
function admin_typekit( ) {
global $pagenow;
$arg = array( 'post.php', 'post-new.php', 'page-new.php', 'page.php' );
if ( ! in_array( $pagenow, $arg ))
return; ?>
<script type="text/javascript">
(function () {
var config = {
kitId:'xxxxxx',
scriptTimeout:3000
};
var h = document.getElementsByTagName("html")[0];
h.className += " wf-loading";
var t = setTimeout(function () {
h.className = h.className.replace(/( |^)wf-loading( |$)/g, "");
h.className += " wf-inactive"
}, config.scriptTimeout);
var tk = document.createElement("script");
tk.src = '//use.typekit.net/' + config.kitId + '.js';
tk.type = "text/javascript";
tk.async = "true";
tk.onload = tk.onreadystatechange = function () {
var a = this.readyState;
if (a && a != "complete" && a != "loaded")return;
clearTimeout(t);
try {
Typekit.load(config)
} catch (b) { } };
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(tk, s)
})();
</script>
<?php }
Typekit用に上記のコードを更新しました。これは、あなたが述べたようにインラインjsを必要とするためです。 admin_enqueue_scriptsを使用していなかったので、$ hook変数を$ pagenowに変更する必要もあります。