编辑器样式和Typekit


10

我的网站使用Typekit来获取自定义字体,该字体可在前端使用。

我想将其放在后端的编辑器样式中。但是,我不知道该怎么做。Typekit使用js嵌入代码段,而不是css字体嵌入代码段。


建议将其迁移到stackoverflow-这实际上不是WP问题。
2012年

2
这是因为我知道一般情况下如何做typekit。我正在尝试将其放入WordPress编辑器中。如果将其移到Stack Overflow上,只会有一小撮人“ hmmm,但这是一个WordPress问题= s”
Tom J Nowell

Answers:


3

Tom Nowell的TinyMCE插件解决方案工作出色,只需更新JavaScript以使用Typekit的新异步代码即可。一旦使用了新的异步嵌入代码,403问题就会消失,并且您将拥有启用了Typekit的TinyMCE,不必大惊小怪!

汤姆将所有代码放在博客文章中。他为此做了所有繁重的工作,因此请给他一些综合浏览量并阅读其中的详细信息


是吗 (我都问了并回答= p),如果不是出于安全考虑,我的解决方案就可以工作,如果我可以将iframe的src设置为可以使用的同一个域上的空白页,我将测试新的异步代码虽然!
汤姆·J·诺维尔

嗯,它确实不错!=]
Tom J Nowell

您能否仅出于完整性考虑用我的代码的更新版本来修改答案?
汤姆·J·诺维尔

我在这里写了一个博客文章:tomjn.com/150/typekit-wp-editor-styles,带有要点中的代码,您是否有一个Twitter帐户,我可以将其归功于您了解异步位?
汤姆·J·诺维尔

我将更新答案以链接到您的博客文章。您在这里做了繁重的工作!
克里斯·范·帕滕

6

我通过添加一个tinymce插件来解决这个问题,它几乎在那里,但是当我试图从typekit检索字体css时,我得到了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;
}

这完全为我工作。它需要一点点的工作和耐心,但效果确实很好!
racl101 2012年

0

您可以将脚本加入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。


并不是那么简单,它是内联脚本,但是如果将其添加到管理员中足以让CSS拾取它,那么它应该可以工作=]
Tom J Nowell

这实际上是行不通的。除了缺少分号和右括号外,一旦修复,它会将字体添加到帖子编辑屏幕中,我可以更改WordPress UI,但不能在编辑器样式中使用该字体。我的帖子内容拒绝使用typekit字体,而是以任何可用的下一个后备字体显示。
汤姆·J·诺维尔

它将出现的JS本身需要插入tinyMCE使用的iframe中,而不是加载WordPress帖子UI的父框架
Tom J Nowell

通过将css复制到我的editor-style.css中,我能够解决CSS文件被禁止的问题。在我尝试了几乎所有其他功能之后,它确实是超级hackhack修复程序,但它确实起作用。
科尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.