Raccourci clavier pour mettre à jour une page ou un article?

8

Quelle est la touche de raccourci clavier pour mettre à jour une page ou un article? Cela pourrait me faire gagner beaucoup de temps car le déroulement d'un brouillon de page prend beaucoup de temps.

Paul Felt
la source

Réponses:

8

J'étais curieux à ce sujet et j'ai vérifié le Codex sur les raccourcis clavier , mais je ne l'ai pas trouvé mentionné ici.

J'ai cherché et découvert que cela semble être déjà résolu, par exemple ici et ici .

Je n'ai pas testé ces autres plugins, donc je ne sais pas comment ils le résolvent, mais j'ai décidé de relever le défi et de voir comment cela pourrait être résolu ;-)

Voici donc mon hack pour créer des raccourcis pour:

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

avec le plugin de test suivant qui s'exécute dans le after_wp_tiny_mcecrochet:

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

J'ai ajouté le rappel d' événement wpse.keydown à chaque éditeur de tinymce sur la page, de sorte que les raccourcis seraient également disponibles à partir de là.

Notez que j'utilise le after_wp_tiny_mcehook, en tant que hook de test pratique sur une installation vanilla , car nous avons affaire à l' objet javascript tinymce . Lorsque nous expédions un tel plugin, nous devons le mettre en file d'attente à partir d'un fichier .js, comme d'habitude.

Nous pourrions également utiliser l' SetupEditorévénement de tinymce , comme mentionné ici par @bonger, mais ici j'ai ajouté une vérification supplémentaire pour voir si tinymce est défini, pour éviter l'erreur javascript sur les pages où il n'est pas défini:

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

Nous pourrions probablement configurer natifs TinyMCE raccourcis ainsi.

Cela pourrait nécessiter des tests et des ajustements, mais cela semble fonctionner sur mon installation.

Birgire
la source
ps: je veux juste mentionner que si la page est chargée en mode texte puis repassée en mode visuel , l'événement tinymce keydown ne se déclenchera pas.
birgire
Quel est le raisonnement derrière l'accrochage à tinymce et non à l'écran de post-édition?
Jan Beck
Bonne question. Étant donné que je traite de l' objet javascript tinymce , j'ai pensé que ce after_wp_tiny_mceserait un crochet de test pratique pour une installation vanilla, où je ne m'attends pas remove_post_type_support( 'post', 'editor' )ou plusieurs éditeurs tinymce sur une page. Mais d'autres crochets fonctionneraient, mais nous devons nous assurer que tinymce est défini. Mais nous expédions notre plugin en le mettant en file d'attente à partir d'un fichier .js, de la manière habituelle. @JanBeck
birgire
Merci d'avoir clarifié votre intention de le mettre en file d'attente en tant que fichier .js. Je me demande toujours cependant pourquoi vous vous souciez même du tinymce. Même si votre écran d'édition de publication ne contient qu'une zone de titre, ne voudriez-vous pas encore pouvoir enregistrer via un raccourci clavier? Je suppose que la question est de savoir si les événements de clavier qui se produisent à l'intérieur du tinymce se propagent dans l'écran de modification de post "extérieur". L'avez-vous testé?
Jan Beck
Au cours de mes tests, j'ai découvert que si je sautais la wpse.set_keydown_for_tinymce()partie, wpse.set_keydown_for_document()je n'attraperais pas les événements de raccourci ctrl + {p, s} de l' éditeur tinymce . C'est pourquoi j'ai pris la peine de tinymce en premier lieu ;-) Si cela pouvait être ignoré, ce serait génial @JanBeck
birgire