Tastaturkürzel zum Aktualisieren einer Seite oder eines Beitrags?

8

Was ist die Tastenkombination zum Aktualisieren einer Seite oder eines Beitrags? Es könnte mir viel Zeit sparen, da das Herunterrollen eines Seitenentwurfs zeitaufwändig ist.

Paul Filz
quelle

Antworten:

8

Ich war neugierig und überprüfte den Codex auf Tastaturkürzeln , fand ihn dort aber nicht erwähnt.

Ich suchte und fand heraus, dass dies bereits gelöst zu sein scheint, zB hier und hier .

Ich habe diese anderen Plugins nicht getestet, daher bin ich mir nicht sicher, wie sie es lösen, aber ich habe mich entschlossen, die Herausforderung anzunehmen und zu sehen, wie dies gelöst werden kann ;-)

Hier ist mein Hack zum Erstellen von Verknüpfungen für:

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

mit dem folgenden Test-Plugin , das innerhalb des after_wp_tiny_mceHooks ausgeführt wird:

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

Ich fügte hinzu , den wpse.keydown Ereignis-Rückruf zu jedem tinymce Editor auf der Seite, so dass die Verknüpfungen auch von dort zur Verfügung stehen würden.

Beachten Sie, dass ich den after_wp_tiny_mceHook als praktischen Test-Hook für eine Vanille- Installation verwende, da es sich um das Tinymce- Javascript-Objekt handelt. Wenn wir ein solches Plugin ausliefern, sollten wir es wie gewohnt aus einer .js-Datei in die Warteschlange stellen.

Wir könnten auch das SetupEditorEreignis von tinymce verwenden , wie hier von @bonger erwähnt, aber hier habe ich eine zusätzliche Überprüfung hinzugefügt, um festzustellen, ob tinymce definiert ist, um Javascript-Fehler auf Seiten zu vermeiden, auf denen es nicht definiert ist:

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

Wir könnten wahrscheinlich auch native Tinymce- Verknüpfungen einrichten .

Dies erfordert möglicherweise einige Tests und Anpassungen, scheint jedoch bei meiner Installation zu funktionieren.

Birgire
quelle
ps: möchte nur erwähnen , dass , wenn die Seite geladen wird in Text - Modus und dann wieder auf den geschalteten Bildmodus, der tinymce keydown Ereignis wird nicht ausgelöst.
Birgire
Was ist der Grund dafür, dies mit Tinymce und nicht mit dem Post-Edit-Bildschirm zu verknüpfen?
Jan Beck
Gute Frage. Da ich mit dem zu tun habe tinymce Javascript - Objekt, dann dachte ich after_wp_tiny_mcefür eine Vanille ein handlicher Test-Haken würde installieren, wo ich nicht erwarten , remove_post_type_support( 'post', 'editor' )oder mehr tinymce Editoren auf einer Seite. Aber andere Hooks würden funktionieren, aber wir müssen sicherstellen, dass Tinymce definiert ist. Aber wir würden unser Plugin versenden, indem wir es wie üblich aus einer .js-Datei in die Warteschlange stellen. @ JanBeck
Birgire
Vielen Dank für die Klarstellung Ihrer Absicht, es als .js-Datei in die Warteschlange zu stellen. Ich frage mich immer noch, warum Sie sich überhaupt für Tinymce interessieren. Selbst wenn Ihr Post-Edit-Bildschirm nur ein Titelfeld enthält, möchten Sie nicht trotzdem über eine Tastenkombination speichern können? Ich denke, die Frage ist, ob Tastaturereignisse, die innerhalb des Tinymce auftreten, in den "äußeren" Post-Edit-Bildschirm sprudeln. Hast du das getestet?
Jan Beck
Während meiner Tests habe ich herausgefunden, dass, wenn ich das wpse.set_keydown_for_tinymce()Teil überspringe , wpse.set_keydown_for_document()die Strg + {p, s} -Tastenereignisse des Tinymce- Editors nicht abgefangen werden . Deshalb habe ich mich in erster Linie mit dem Tinymce beschäftigt ;-) Wenn das übersprungen werden könnte, wäre das großartig @JanBeck
Birgire