에디터 스타일과 타입 킷


10

내 웹 사이트는 typekit을 사용하여 프런트 엔드에서 작동하는 사용자 정의 글꼴을 가져옵니다.

백엔드의 편집기 스타일에 이것을 넣고 싶습니다. 그러나 나는 이것을 어떻게 할 것인지 모른다. Typekit은 CSS font-face embed 스 니펫 대신 js embed 스 니펫을 사용합니다.


이것이 stackoverflow로 마이그레이션 될 것을 제안합니다. 실제로 WP 문제는 아닙니다.
— anu

2
일반적인 경우에 typekit을 수행하는 방법을 알고 있기 때문입니다. 내가하려는 것은 WordPress 편집기에 넣는 것입니다. 스택 오버플로로 이동하면 "hmmm로가는 사람들이 많을 것입니다. 그러나 이것은 WordPress question = s"입니다.
— Tom J Nowell

답변:


3

Tom Nowell의 TinyMCE 플러그인 솔루션 은 훌륭하게 작동합니다. JavaScript를 업데이트하여 Typekit의 새로운 비동기 코드 를 사용 하십시오 . 새로운 비동기 소스 코드를 사용하면 403 문제가 사라지고 번거 로움없이 Typekit 지원 TinyMCE를 사용할 수 있습니다!

Tom은 모든 코드를 블로그 게시물에 정리했습니다. 그는 이것에 대해 많은 노력을 기울 였으므로 페이지 뷰를 제공하고 거기에 대한 세부 사항을 읽으십시오 !


그렇습니다? (나는 둘 다 묻고 대답했다 = p) 보안이 아닌 경우 내 솔루션이 작동합니다 .iframe의 src를 동일한 도메인의 빈 페이지로 설정할 수 있으면 새 비동기 코드를 테스트해야합니다 그러나!
— Tom J Nowell

그럼이 만세 삼창 않습니다 ! =]
— Tom J Nowell

완전성을 위해 업데이트 된 버전의 코드로 답변을 수정할 수 있습니까?
— Tom J Nowell

블로그 게시물을 작성했습니다 : tomjn.com/150/typekit-wp-editor-styles 코드가 포함되어 있습니다. 비동기 비트를 알아 내기 위해 신용 할 수있는 트위터 계정이 있습니까?
— Tom J Nowell

블로그 게시물에 링크되도록 답변을 업데이트하겠습니다. 당신은 여기서 무거운 짐을 들었습니다!
— Chris Van Patten

6

tinymce 플러그인을 추가 하여이 문제를 해결했습니다. 거의 거기에 있지만 typekit에서 글꼴 CSS를 검색하려고 할 때 403이 금지됩니다.

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

관리자를 위해 스크립트를 대기열에 넣을 수 있으며 편집기에서 사용할 수 있어야합니다.

    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 }

편집하다:

위에서 언급 한 것처럼 인라인 j가 필요하므로 typekit에 대해 위의 코드를 업데이트했습니다. 또한 admin_enqueue_scripts를 사용하지 않았으므로 $ hook 변수를 $ pagenow로 변경해야합니다.


그렇게 간단하지는 않지만 인라인 스크립트이지만 관리자에 추가하면 CSS가 그것을 가져 오기에 충분할 경우 작동합니다 =]
— Tom J Nowell

실제로 작동하지 않습니다. 누락 된 세미콜론과 닫는 대괄호를 제외하고 일단 수정되면 포스트 편집 화면에 글꼴을 추가하면 WordPress UI를 변경할 수 있지만 편집기 스타일에서는 글꼴을 사용할 수 없습니다. 내 게시물 내용은 typekit 글꼴 사용을 거부하고 사용 가능한 다음 대체 글꼴에 표시합니다.
— Tom J Nowell

JS 자체는 WordPress post UI를로드하는 부모 프레임이 아니라 tinyMCE가 사용하는 iframe에 삽입해야합니다.
— Tom J Nowell

CSS를 editor-style.css에 복사하여 CSS 파일의 문제를 해결할 수있었습니다. 그것은 슈퍼 hackish 수정이지만 다른 모든 것에 대해 시도한 후에 효과가있었습니다.
— Cole
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.