¿Atajo de teclado para actualizar una página o publicación?

8

¿Cuál es la tecla de acceso directo del teclado para actualizar una página o publicación? Podría ahorrarme mucho tiempo, ya que desplegar un borrador de página consume mucho tiempo.

Paul Felt
fuente

Respuestas:

8

Tenía curiosidad sobre esto y revisé el Codex en los atajos de teclado , pero no lo encontré mencionado allí.

Busqué y descubrí que esto parece estar resuelto, por ejemplo, aquí y aquí .

No he probado estos otros complementos, así que no estoy seguro de cómo lo resuelven, pero decidí asumir el desafío y ver cómo se podría resolver esto ;-)

Así que aquí está mi truco para crear accesos directos para:

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

con el siguiente complemento de prueba que se ejecuta dentro del after_wp_tiny_mcegancho:

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

He añadido el wpse.keydown evento de devolución de llamada para cada tinymce editor de la página, por lo que los accesos directos estarían disponibles a partir de ahí también.

Tenga en cuenta que uso el after_wp_tiny_mcegancho, como un gancho de prueba conveniente en una instalación de vainilla , ya que estamos tratando con el objeto javascript tinymce . Cuando enviamos un complemento de este tipo, debemos ponerlo en cola desde un archivo .js, como de costumbre.

También podríamos usar el SetupEditorevento de tinymce , como se menciona aquí por @bonger, pero aquí he agregado una comprobación adicional para ver si se define tinymce , para evitar errores de JavaScript en páginas donde no está definido:

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

Probablemente también podríamos configurar atajos nativos de tinymce .

Esto podría necesitar algunas pruebas y ajustes, pero parece funcionar en mi instalación.

Birgire
fuente
ps: solo quiero mencionar que si la página se carga en modo Texto y luego vuelve al modo Visual , el evento keyymce keydown no se activará.
Birgire
¿Cuál es el razonamiento detrás de conectar esto a tinymce y no a la pantalla de edición de publicación?
Jan Beck
Buena pregunta. Como estoy tratando con el objeto javascript tinymce , pensé after_wp_tiny_mceque sería un práctico gancho de prueba para una instalación de vainilla, donde no esperaba remove_post_type_support( 'post', 'editor' )o múltiples editores tinymce en una página. Pero otros ganchos funcionarían, pero tenemos que asegurarnos de que se haya definido tinymce . Pero enviaríamos nuestro complemento poniéndolo en cola desde un archivo .js, de la forma habitual. @JanBeck
birgire
Gracias por la aclaración sobre su intención de ponerlo en cola como un archivo .js. Sin embargo, todavía me pregunto por qué te importa el tinymce. Incluso si la pantalla de edición de su publicación solo contiene un cuadro de título, ¿no le gustaría poder guardar mediante el atajo de teclado? Supongo que la pregunta es si los eventos de teclado que ocurren dentro de la tinymce están surgiendo en la pantalla de edición posterior "exterior". ¿Has probado eso?
Jan Beck
Durante mis pruebas, descubrí que si omito la wpse.set_keydown_for_tinymce()parte, wpse.set_keydown_for_document()no capturaré los eventos de keydown ctrl + {p, s} del editor tinymce . Así que por eso me molesté con el tinymce en primer lugar ;-) Si eso se pudiera omitir, sería genial @ JanBeck
birgire