Сочетание клавиш для обновления страницы или сообщения?

8

Что такое сочетание клавиш для обновления страницы или сообщения? Это может сэкономить мне много времени, так как просмотр черновика страницы занимает много времени.

Пол Фетт
источник

Ответы:

8

Мне было любопытно по этому поводу и проверил кодекс по сочетаниям клавиш , но не нашел там упомянутого.

Я искал и обнаружил, что это, кажется, уже решено, например, здесь и здесь .

Я не проверял эти другие плагины, поэтому я не уверен, как они решают это, но я решил принять вызов и посмотреть, как это можно решить ;-)

Итак, вот мой хак для создания ярлыков для:

ctrl+s : Save Draft
ctrl+p : Publish / Update

со следующим тестовым плагином, который работает в after_wp_tiny_mceхуке:

/**
 * Plugin Name: Testing ctrl+s and ctrl+p for saving and publishing posts.
 * Plugin URI:  https://wordpress.stackexchange.com/a/199411/26350
 */
add_action( 'after_wp_tiny_mce', function()
{?><script>
    ( function ( $ ) {
        'use strict';
        $( window ).load( function () {
            wpse.init();
        });
        var wpse = {
            keydown : function (e) {
                if( e.ctrlKey && 83 === e.which ) {
                    // ctrl+s for "Save Draft"
                    e.preventDefault();
                    $( '#save-post' ).trigger( 'click' ); 
                } else if ( e.ctrlKey && 80 === e.which ) {
                    // ctrl+p for "Publish" or "Update"
                    e.preventDefault();
                    $( '#publish' ).trigger( 'click' );
                }
            },
            set_keydown_for_document : function() {
                $(document).on( 'keydown', wpse.keydown );
            },
            set_keydown_for_tinymce : function() {
               if( typeof tinymce == 'undefined' )
                   return;
               for (var i = 0; i < tinymce.editors.length; i++)
                   tinymce.editors[i].on( 'keydown', wpse.keydown );
           },
           init : function() {
               wpse.set_keydown_for_document();
               wpse.set_keydown_for_tinymce();
           }
       }                                                        
    } ( jQuery ) );
    </script><?php });

Я добавил функцию обратного вызова wpse.keydown для каждого редактора tinymce на странице, поэтому ярлыки будут доступны и там.

Обратите внимание, что я использую after_wp_tiny_mceловушку в качестве удобного тестового крючка для ванильной установки, поскольку мы имеем дело с объектом javascript tinymce . Когда мы отправляем такой плагин, мы, как обычно, ставим его в очередь из файла .js.

Мы также могли бы использовать SetupEditorсобытие tinymce , как упомянуто здесь @bonger, но здесь я добавил дополнительную проверку, чтобы определить, определено ли tinymce , чтобы избежать ошибки javascript на страницах, где он не определен:

// Keydown for tinymce
if( typeof tinymce != 'undefined' )
{
    tinymce.on( 'SetupEditor', function (editor) {
        wpse.set_keydown_for_tinymce();
    });
}
// Keydown for document
wpse.set_keydown_for_document();

Вероятно, мы могли бы также установить собственные ярлыки Tinymce .

Это может потребовать некоторого тестирования и корректировки, но, похоже, работает на моей установке.

birgire
источник
PS: просто хочу упомянуть, что если страница загружается в текстовом режиме и затем переключается обратно в визуальный режим, событие нажатия клавиш tinymce не будет запускаться.
Birgire
Какая причина заключается в том, чтобы привязать это к tinymce, а не к экрану редактирования записи?
Ян Бек
Хороший вопрос. Так как я имею дело с объектом tinymce javascript, я подумал, after_wp_tiny_mceчто это будет удобная проверка для ванильной установки, где я не ожидаю remove_post_type_support( 'post', 'editor' )или несколько редакторов tinymce на странице. Но другие хуки будут работать, но мы должны убедиться, что tinymce определен. Но мы бы поставили наш плагин, поставив его в очередь из файла .js обычным способом. @JanBeck
Birgire
Спасибо за разъяснение о вашем намерении поставить его в файл .js. Я до сих пор удивляюсь, почему ты вообще заботишься о tinymce. Даже если ваш экран редактирования поста содержит только поле заголовка, не хотите ли вы сохранить его с помощью сочетания клавиш? Я предполагаю, что вопрос в том, пузырьковые события, происходящие внутри tinymce, всплывают на "внешний" экран редактирования поста. Вы проверяли это?
Ян Бек
Во время тестирования я обнаружил, что если я пропущу wpse.set_keydown_for_tinymce()часть, то wpse.set_keydown_for_document()не получит события нажатия клавиш ctrl + {p, s} из редактора tinymce . Так вот почему я в первую очередь беспокоился о лакомом ;-) Если бы это можно было пропустить, это было бы здорово @JanBeck
birgire