Styles de l'éditeur et Typekit

10

Mon site Web utilise typekit pour récupérer des polices personnalisées, qui fonctionnent sur le frontend.

Je voudrais mettre cela dans mes styles d'éditeur dans le backend. Cependant, je ne sais pas comment je procéderais. Typekit utilise un extrait intégré js plutôt qu'un extrait intégré de police css.

Tom J Nowell
la source
suggèrent que cela est migré vers stackoverflow - ce n'est pas vraiment un problème WP.
anu
2
C'EST parce que je sais faire typekit dans le cas général. Ce que j'essaie de faire, c'est de le mettre dans l'éditeur WordPress. S'il est déplacé vers Stack Overflow, il y aura juste un tas de gens qui vont "hmmm mais c'est une question WordPress = s"
Tom J Nowell

Réponses:

3

La solution de plugin TinyMCE de Tom Nowell fonctionne à merveille, il suffit de mettre à jour le JavaScript pour utiliser le nouveau code asynchrone de Typekit . Une fois que vous utilisez le nouveau code d'intégration asynchrone, le problème 403 disparaît et vous aurez TinyMCE compatible Typekit sans tracas!

Tom a rassemblé tout le code dans un article de blog. Il a fait tout le nécessaire, alors allez lui donner quelques pages vues et lisez les détails là-bas !

Chris Van Patten
la source
Cela fait? (J'ai à la fois demandé et répondu = p) ma solution fonctionnerait sans la sécurité, si je pouvais définir le src de l'iframe sur une page vierge sur le même domaine, cela fonctionnerait, je testerai le nouveau code asynchrone bien que!
Tom J Nowell
Eh bien huzzah ça le fait !! =]
Tom J Nowell
Pourriez-vous modifier votre réponse avec la version mise à jour de mon code juste pour être complet?
Tom J Nowell
J'ai écrit un article de blog ici: tomjn.com/150/typekit-wp-editor-styles avec le code dans gists, avez-vous un compte twitter avec lequel je peux vous créditer pour avoir compris le bit asynchrone?
Tom J Nowell
Je mettrai à jour ma réponse pour créer un lien vers votre article de blog. Vous avez fait le gros du travail ici!
Chris Van Patten
6

J'ai contourné cela en ajoutant un plugin tinymce, il est presque là mais je reçois un 403 interdit quand il essaie de récupérer la police css de 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
la source
Cela a totalement fonctionné pour moi. Cela demande un peu de travail et de patience mais ça marche vraiment bien!
racl101
0

Vous pouvez mettre le script en file d'attente pour l'administrateur, puis il devrait être disponible pour votre éditeur.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 }

Éditer:

Mise à jour du code ci-dessus pour typekit car il nécessite des js en ligne comme vous l'avez mentionné. Nous devons également remplacer la variable $ hook par $ pagenow car nous n'utilisions pas admin_enqueue_scripts.

Chris_O
la source
Ce n'est pas aussi simple que cela, c'est un script en ligne, mais si l'ajouter dans l'admin est suffisant pour que le CSS le ramasse alors cela devrait fonctionner =]
Tom J Nowell
Cela ne fonctionne pas vraiment. Mis à part un point-virgule manquant et un crochet de fermeture, une fois corrigé, il ajoute la police à l'écran de post-édition, je peux changer l'interface utilisateur de WordPress, mais je ne peux pas utiliser la police dans les styles de l'éditeur. Le contenu de mon message refuse d'utiliser les polices typekit et s'affiche à la place dans toutes les polices de secours disponibles.
Tom J Nowell
Le JS lui-même semble devoir être inséré dans l'iframe tinyMCE utilise, pas le cadre parent qui charge l'interface utilisateur de WordPress
Tom J Nowell
J'ai pu résoudre le problème de l'interdiction du fichier CSS en copiant le CSS dans mon éditeur-style.css. C'est un correctif super hackish mais cela a fonctionné, après avoir essayé à peu près tout le reste.
Cole