Style edytora i Typekit

10

Moja strona internetowa używa typekit do pobierania niestandardowych czcionek, które działają w interfejsie użytkownika.

Chciałbym umieścić to w moich stylach edytora w backend. Nie wiem jednak, jak bym to zrobił. Typekit używa fragmentu osadzonego js zamiast fragmentu osadzonego czcionką css.

Tom J Nowell
źródło
sugerują, że jest to migrowane do stackoverflow - tak naprawdę nie jest to problem WP.
anu
2
To dlatego, że wiem, jak zrobić typekit w ogólnym przypadku. Próbuję to umieścić w edytorze WordPress. Jeśli zostanie przeniesiony do Przepełnienia stosu, będzie mnóstwo ludzi, którzy będą mówić „hmmm, ale to jest pytanie WordPress = s”
Tom J Nowell

Odpowiedzi:

3

Tom Nowell za rozwiązanie plugin TinyMCE działa wspaniale, po prostu zaktualizować JavaScript aby użyć nowego kodu asynchronicznego Typekit użytkownika . Gdy użyjesz nowego asynchronicznego kodu do osadzenia, problem 403 znika, a Ty będziesz mieć TinyMCE z obsługą Typekit bez kłopotów!

Tom umieścił cały kod w jednym poście na blogu. Zrobił to bardzo ciężko, więc daj mu kilka odsłon i przeczytaj tam szczegóły !

Chris Van Patten
źródło
To robi? (Zarówno zapytałem, jak i odpowiedziałem = p) moje rozwiązanie działałoby, gdyby nie bezpieczeństwo, gdyby mógłbym ustawić src iframe na pustą stronę w tej samej domenie, w której działałby, przetestuję nowy kod asynchroniczny chociaż!
Tom J Nowell
Huzzah to robi !! =]
Tom J Nowell
Czy możesz zmodyfikować swoją odpowiedź za pomocą zaktualizowanej wersji mojego kodu tylko dla kompletności?
Tom J Nowell
Napisałem tutaj post na blogu: tomjn.com/150/typekit-wp-editor-styles z kodem w gists, czy masz konto na Twitterze, za które mogę ci przypisać, że wymyśliłeś bit asynchroniczny?
Tom J Nowell
Zaktualizuję moją odpowiedź, aby link do Twojego posta na blogu. Podniosłeś ciężki ładunek tutaj!
Chris Van Patten,
6

Obejrzałem to, dodając wtyczkę tinymce, już prawie jest, ale dostaję 403 zabronione, gdy próbuje odzyskać czcionkę css z 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;
}
Tom J Nowell
źródło
To całkowicie zadziałało dla mnie. Wymaga trochę pracy i cierpliwości, ale działa naprawdę dobrze!
racl101
0

Możesz kolejkować skrypt dla administratora, a następnie powinien on być dostępny dla pliku 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 }

Edytować:

Zaktualizowano powyższy kod dla typekit, ponieważ wymaga on niektórych wbudowanych plików js, takich jak wspomniane. Musimy również zmienić zmienną $ hook na $ pagenow, ponieważ nie używaliśmy skryptów admin_enqueue_scripts.

Chris_O
źródło
To nie jest takie proste, to wbudowany skrypt, ale jeśli dodanie go do administratora wystarczy, aby css go podniósł, to powinno działać =]
Tom J Nowell
To nie działa. Oprócz brakującego średnika i nawiasu zamykającego, po naprawieniu dodaje czcionkę do ekranu edycji postu, mogę zmienić interfejs WordPress, ale nie mogę używać czcionki w stylach edytora. Treść mojego wpisu odmawia użycia czcionek typekit i zamiast tego wyświetla się we wszystkich następnych dostępnych czcionkach zastępczych.
Tom J Nowell
JS sama wydaje potrzeb wkładanie do zastosowań iframe TinyMCE nie rama rodzic, który ładuje WordPress po UI
Tom J Nowell
Byłem w stanie naprawić problem związany z zakazem pliku CSS poprzez skopiowanie css do mojego edytora style.css. Jest to super hackerska poprawka, ale zadziałało, po tym jak spróbowałem prawie wszystkiego innego.
Cole