Стилі редактора та Typekit


10

Мій веб-сайт використовує typekit, щоб захопити власні шрифти, що працює на фронталі.

Я хотів би помістити це в мої редактори стилів у бекенді. Однак я не знаю, як би я це зробив. Typekit використовує фрагмент js embed, а не фрагмент вбудовування шрифту css.


припускають, що це перенесено на stackoverflow - це насправді не проблема WP.
ану

2
Це тому, що я знаю, як зробити typekit в загальному випадку. Що я намагаюся зробити - це помістити його в редактор WordPress. Якщо він перейде на Stack Overflow, просто буде набір людей, які йдуть "хммм, але це питання WordPress = s"
Том Дж. Ноуелл

Відповіді:


3

Рішення для плагінів TinyMCE Тома Ноуелла працює чудово, просто оновіть JavaScript, щоб використовувати новий асинхронний код Typekit . Після використання нового коду вбудовування асинхроніка проблема 403 зникає, і ви матимете TinyMCE з підтримкою Typekit без суєти!

Том зібрав весь код разом у публікації в блозі. Він зробив усе важке підняття з цього питання, тому йдіть, дайте йому кілька переглядів сторінок і прочитайте там специфіку !


Це робить? (Я і запитав, і відповів = p) моє рішення спрацювало б, якби не безпека, якби я міг встановити src рамки iframe на порожню сторінку в тому самому домені, який би спрацював, я перевірю новий код асинхронізації хоча!
Том Дж. Ноуелл

Ну huzzah це робить !! =]
Том Дж. Ноуелл

Чи можете ви змінити свою відповідь оновленою версією мого коду лише для повноти?
Том Дж. Ноуелл

Я написав тут щоденник блогу: tomjn.com/150/typekit-wp-editor-styles з кодом у списках, чи є у вас акаунт щебетання, з яким я можу вам зачитати, що з'ясував біт асинхронізації?
Tom J Nowell

Я оновлю свою відповідь, щоб посилатися на вашу публікацію в блозі Ви тут зробили важкий підйом!
Кріс Ван Паттен

6

Я обійшов це, додавши модуль tinymce, він майже є, але мені стає заборонено 403, коли він намагається отримати шрифт css з typekit:

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

0

Ви можете залишити скрипт для адміністратора, тоді він повинен бути доступний для вашого 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, як ви згадали. Ми також повинні змінити змінну $ гак на $ pagenow, оскільки вони не використовували admin_enqueue_scripts.


Це не так просто, це вбудований сценарій, але якщо додати його в адміністраторі, достатньо, щоб CSS його забрав, то він повинен працювати =]
Tom J Nowell

Це насправді не працює. Окрім відсутньої крапки з комою та дужки, що закривається, після виправлення додається шрифт на екран редагування публікацій, я можу змінити інтерфейс WordPress, але не можу використовувати шрифт у стилях редактора. Вміст моєї публікації відмовляється від використання шрифтів typekit і замість цього відображається у всіх наступних резервних шрифтах.
Том Дж. Ноуелл

Сам JS, здається, потребує вставки в рамки iframe tinyMCE, а не батьківський кадр, який завантажує інтерфейс повідомлення WordPress
Tom J Nowell

Мені вдалося виправити проблему забороненого файлу CSS, скопіювавши css в мій редактор-style.css. Це супер хакерське виправлення, але воно спрацювало, після того, як я спробував майже все інше.
Коул
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.