Редактор стилей и Typekit


10

Мой сайт использует typekit для захвата пользовательских шрифтов, который работает на внешнем интерфейсе.

Я бы хотел добавить это в стили моего редактора в бэкэнде. Однако я не знаю, как бы я это сделал. Typekit использует фрагмент вставки js, а не фрагмент вставки шрифта css.


предположить, что это перенесено в stackoverflow - на самом деле это не проблема WP.
ана

2
Это потому, что я знаю, как сделать typekit в общем случае. Я пытаюсь сделать это в редакторе WordPress. Если его перенести в переполнение стека, просто будет множество людей, которые скажут: «Хммм, но это вопрос WordPress = s»
Том Дж. Новелл

Ответы:


3

Решение TinyMCE для плагинов Tom Nowell прекрасно работает, просто обновите JavaScript, чтобы использовать новый асинхронный код Typekit . Как только вы используете новый код асинхронного встраивания, проблема 403 исчезнет, ​​и вы получите TinyMCE с поддержкой Typekit без суеты!

Том собрал весь код в сообщении в блоге. Он проделал всю тяжелую работу по этому вопросу, так что иди и дай ему несколько просмотров страниц и прочитай там подробности !


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

Ну хуза это делает !! =]
Том Дж. Новелл

Не могли бы вы изменить свой ответ обновленной версией моего кода только для полноты?
Том Дж. Новелл

Я написал здесь пост блога: tomjn.com/150/typekit-wp-editor-styles с кодом в gists. У вас есть аккаунт в твиттере, с которым я могу вам доверять, чтобы выяснить бит асинхронности?
Том Дж. Новелл

Я обновлю свой ответ, чтобы перейти к вашей записи в блоге. Вы сделали тяжелую работу здесь!
Крис Ван Паттен

6

Я справился с этим, добавив плагин tinymce, он почти готов, но я получаю 403 запрещенных, когда он пытается извлечь шрифт css из typekit:

ЯШ:

(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, как вы упомянули. Мы также должны изменить переменную $ hook на $ pagenow, поскольку не использовали admin_enqueue_scripts.


Это не так просто, это встроенный скрипт, но если добавления его в админке достаточно, чтобы css поднял его, он должен работать =]
Tom J Nowell

Это на самом деле не работает. Помимо пропущенной точки с запятой и закрывающей скобки, после исправления добавление шрифта к экрану редактирования записи я могу изменить пользовательский интерфейс WordPress, но не могу использовать шрифт в стилях редактора. Содержимое моего сообщения отказывается использовать шрифты typekit и вместо этого отображается в любых доступных следующих резервных шрифтах.
Том Дж. Новелл

Сам JS, по-видимому, нуждается в вставке в iframe tinyMCE, а не в родительский фрейм, который загружает пользовательский интерфейс публикации WordPress
Том Дж. Новелл

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