Pintasan keyboard untuk memperbarui halaman atau posting?

8

Apa tombol pintas keyboard untuk memperbarui halaman atau posting? Ini bisa menghemat banyak waktu karena menggulung draf halaman memakan waktu.

Paul Felt
sumber

Jawaban:

8

Saya ingin tahu tentang ini dan memeriksa Codex pada pintasan keyboard , tetapi tidak menemukannya disebutkan di sana.

Saya mencari dan menemukan bahwa ini tampaknya sudah diselesaikan, misalnya di sini dan di sini .

Saya belum menguji plugins lain ini jadi saya tidak yakin bagaimana mereka menyelesaikannya, tapi saya memutuskan untuk mengambil tantangan dan melihat bagaimana ini bisa diselesaikan ;-)

Jadi, inilah hack saya untuk membuat pintasan untuk:

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

dengan plugin tes berikut yang berjalan dalam after_wp_tiny_mcehook:

/**
 * 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 });

Saya menambahkan wpse.keydown acara-callback untuk setiap TinyMCE editor pada halaman, sehingga shortcut akan tersedia dari sana juga.

Perhatikan bahwa saya menggunakan after_wp_tiny_mcepengait, sebagai penguji uji convinient pada pemasangan vanilla , karena kita berurusan dengan objek javascript tinymce . Ketika kami mengirimkan plugin semacam itu, kami harus mengeluarkannya dari file .js, seperti biasa.

Kita juga bisa menggunakan SetupEditorevent tinymce , seperti yang disebutkan di sini oleh @bonger, tetapi di sini saya telah menambahkan pemeriksaan tambahan untuk melihat apakah tinymce didefinisikan, untuk menghindari kesalahan javascript pada halaman yang tidak didefinisikan:

// 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();

Kami mungkin bisa menyiapkan pintasan tinymce asli juga.

Ini mungkin memerlukan beberapa pengujian & penyesuaian, tetapi tampaknya berfungsi pada instalasi saya.

birgire
sumber
ps: hanya ingin menyebutkan bahwa jika halaman dimuat dalam mode Teks dan kemudian beralih kembali ke mode Visual , peristiwa keydown tinymce tidak akan menyala.
birgire
Apa alasan di balik mengaitkan ini ke tinymce dan bukan ke layar edit posting?
Jan Beck
Pertanyaan bagus. Karena saya berurusan dengan objek javascript tinymce , maka saya pikir after_wp_tiny_mceakan menjadi penguji yang berguna untuk pemasangan vanilla, di mana saya tidak mengharapkan remove_post_type_support( 'post', 'editor' )atau beberapa editor tinymce pada halaman. Tetapi pengait lain akan berfungsi, tetapi kita harus memastikan bahwa timah didefinisikan. Tetapi kami akan mengirimkan plugin kami dengan mengirimkannya dari file .js, dengan cara biasa. @ JanBeck
birgire
Terima kasih atas klarifikasi tentang niat Anda untuk membuatnya sebagai file .js. Saya masih bertanya-tanya, mengapa Anda bahkan peduli tentang tinymce sama sekali. Bahkan jika layar edit posting Anda hanya berisi kotak judul, bukankah Anda masih ingin menyimpan melalui pintasan keyboard? Saya kira pertanyaannya adalah apakah peristiwa keyboard yang terjadi di dalam tinymce menggelegak ke layar edit posting "luar". Sudahkah Anda mengujinya?
Jan Beck,
Selama pengujian saya, saya menemukan bahwa jika saya melewatkan wpse.set_keydown_for_tinymce()bagian, maka wpse.set_keydown_for_document()tidak akan menangkap peristiwa keydown ctrl + {p, s} dari editor tinymce . Jadi itu sebabnya saya repot-repot dengan tinymce di tempat pertama ;-) Jika itu bisa dilewati, itu akan menjadi bagus @JanBeck
birgire