Gaya Editor dan Typekit

10

Situs web saya menggunakan typekit untuk mengambil font khusus, yang berfungsi di frontend.

Saya ingin meletakkan ini di gaya editor saya di backend. Namun, saya tidak tahu bagaimana saya akan melakukan ini. Typekit menggunakan snippet embed js daripada snippet embed font-face css.

Tom J Nowell
sumber
sarankan ini dimigrasikan ke stackoverflow - ini bukan masalah WP.
anu
2
Itu karena saya tahu bagaimana melakukan typekit dalam kasus umum. Yang saya coba lakukan adalah memasukkannya ke editor WordPress. Jika dipindahkan ke Stack Overflow hanya akan ada banyak orang yang akan "hmmm tapi ini adalah pertanyaan WordPress = s"
Tom J Nowell

Jawaban:

3

Solusi plugin TinyMCE dari Tom Nowell bekerja dengan sangat baik, cukup perbarui JavaScript untuk menggunakan kode async baru Typekit . Setelah Anda menggunakan kode semat async baru, masalah 403 menghilang dan Anda akan memiliki TinyMCE yang diaktifkan Typekit tanpa keributan!

Tom telah memasukkan semua kode dalam satu posting blog. Dia melakukan semua hal yang berat, jadi berikan dia beberapa tampilan halaman dan bacalah secara spesifik di sana !

Chris Van Patten
sumber
Iya kan? (Saya berdua bertanya dan menjawab = p) solusi saya akan bekerja jika bukan karena keamanan, jika saya dapat mengatur src iframe ke halaman kosong pada domain yang sama itu akan berfungsi, saya akan menguji kode async baru meskipun!
Tom J Nowell
Nah Sabas itu tidak !! =]
Tom J Nowell
Bisakah Anda mengubah jawaban Anda dengan versi terbaru dari kode saya hanya untuk kelengkapan?
Tom J Nowell
Saya telah menulis posting blog di sini: tomjn.com/150/typekit-wp-editor-styles dengan kode di intisari, apakah Anda memiliki akun twitter yang dapat saya kreditkan kepada Anda untuk mengetahui bit async?
Tom J Nowell
Saya akan memperbarui jawaban saya untuk menautkan ke posting blog Anda. Anda melakukan angkat berat di sini!
Chris Van Patten
6

Saya menyiasatinya dengan menambahkan plugin tinymce, itu hampir ada tetapi saya mendapatkan 403 terlarang ketika mencoba untuk mengambil font css dari 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
sumber
Ini benar-benar bekerja untuk saya. Ini membutuhkan sedikit kerja dan kesabaran tetapi itu bekerja dengan sangat baik!
racl101
0

Anda dapat membuat skrip untuk admin kemudian harus tersedia untuk editor.css Anda

    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 }

Edit:

Diperbarui kode di atas untuk typekit karena memerlukan beberapa js inline seperti yang Anda sebutkan. Kita juga harus mengubah variabel $ hook menjadi $ pagenow karena tidak menggunakan admin_enqueue_scripts.

Chris_O
sumber
Tidak sesederhana itu, skrip inline, tetapi jika menambahkannya di admin sudah cukup bagi css untuk mengambilnya, maka seharusnya berfungsi =]
Tom J Nowell
Ini sebenarnya tidak berhasil. Selain dari titik koma yang hilang dan braket penutup, setelah diperbaiki itu menambahkan font ke layar edit posting, saya dapat mengubah UI WordPress, tetapi saya tidak dapat menggunakan font dalam gaya editor. Konten posting saya menolak untuk menggunakan font typekit dan sebagai gantinya menampilkan apa pun font fallback berikutnya yang tersedia.
Tom J Nowell
JS itu sendiri akan muncul perlu dimasukkan ke dalam iframe tinyMCE menggunakan, bukan kerangka induk yang memuat posting WordPress UI
Tom J Nowell
Saya dapat memperbaiki masalah file CSS yang dilarang dengan menyalin css ke editor-style.css saya. Ini adalah perbaikan yang super retas tetapi berhasil, setelah saya mencoba hampir semua hal lainnya.
Cole