it-swarm.com.de

So deaktivieren Sie TinyMCE 4-Tastaturkürzel

Ich möchte all TinyMCE 4-Tastaturkürzel deaktivieren. Ich habe mich nach einer praktikablen Lösung umgesehen, aber nur festgestellt, wie schlecht die TinyMCE-Dokumentation ist.

Ich habe eine Antwort hier gefunden aber entweder kann ich sie nicht anwenden oder sie funktioniert nicht mit TinyMCE 4 (das wurde mit WP 3.9+ eingeführt).

Jeder mit vernünftigem TinyMCE- und WP Wissen, der dies knacken kann?

3
TBone

Re Antwort Zitiert vom OP:

Bearbeitet, um Meta und Zugriff und andere hinzuzufügen.

Die erwähnten custom_shortcuts Flags waren in Tinymce 3.x (siehe hier ), wurden aber aus 4.x entfernt, und beim Scannen der Quelle scheint nichts Äquivalentes ersetzt worden zu sein.

Die erwähnte foo-Funktionsmethode kann weiterhin verwendet werden. In der "functions.php" deines Themas:

add_action( 'wp_tiny_mce_init', function () {
    ?>
    <script>
        function wpse167402_tiny_mce_init(ed) {
            ed.on('init', function () {
                // Note these lists may not be complete & that other tinymce plugins can add their own shortcuts anyway.
                var ctrls = [ 'b', 'i', 'u', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'z', 'y,ctrl+shift+z', 's', 'k', 'Alt+F', 'P', 'shift+e > ctrl+shift+p' ]; // Could add 'x', 'c', 'v'.
                var metas = [ 'b', 'i', 'u', 'z', 'y,meta+shift+z', 's', 'k' ]; // Could add 'x', 'c', 'v'.
                var modKeys = [ 'c', 'r', 'l', 'j', 'q', 'u', 'o', 'n', 's', 'm', 'z', 't', 'd', 'h', 'o', 'x', 'a', 'w' ];
                var accesss = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 's', 'c', 'r', 'l', 'j', 'q', 'u', 'o', 'm', 'z', 't', 'd', 'h', 'p', 'x' ];
                var others = [ 'Ctrl+Shift+F', 'Meta+K', 'alt+119', 'Alt+F10', 'Alt+F9', 'Alt+F10,F10', 'Alt+F11' ];
                var i;

                // Overwrite shortcuts with no-op function. Key sequences will still be captured.
                for (i = 0; i < ctrls.length; i++ ) {
                    this.addShortcut('ctrl+' + ctrls[i], '', function () {});
                }
                for (i = 0; i < metas.length; i++ ) {
                    this.addShortcut('meta+' + metas[i], '', function () {});
                }
                for (i = 0; i < modKeys.length; i++ ) {
                    this.addShortcut('alt+shift+' + modKeys[i], '', function () {});
                }
                for (i = 0; i < accesss.length; i++ ) {
                    this.addShortcut('access+' + accesss[i], '', function () {});
                }
                for (i = 0; i < others.length; i++ ) {
                    this.addShortcut( others[i], '', function () {});
                }
            });
        }
    </script>
    <?php
});
function wpse167402_tiny_mce_before_init( $mceInit ) {
    $mceInit['setup'] = 'wpse167402_tiny_mce_init';
    return $mceInit;
}
add_filter( 'tiny_mce_before_init', 'wpse167402_tiny_mce_before_init' );

Ursprüngliche Antwort

Die ursprüngliche Antwort ersetzte das Objekt shortcuts des Editors durch ein No-Op (das Ereignis SettupEditor wird ausgelöst, bevor Tinymce-Instanzen erstellt werden):

add_action( 'wp_tiny_mce_init', function () {
    ?>
    <script>
    tinymce.on('SetupEditor', function (editor) {
        editor.shortcuts = { add: function() {} };
    });
    </script>
    <?php
});

Dies deaktiviert zwar alle Schnellzugriffe von tinymce, hat jedoch den unglücklichen Nebeneffekt, dass das standardmäßige Browserverhalten zugelassen wird. Bei contentEditable -Elementen (als die das Bearbeitungsfeld von tinymce markiert ist) können verschiedene Formatierungen wie Strg + B, Strg + I und Strg verwendet werden + u (Dokumentation dazu ist sehr schlecht), je nach Browser. Um dies zu umgehen, müssen die Verknüpfungen zur ursprünglichen Funktion einfach weitergegeben werden, wobei cmdFunc durch eine noop-Funktion ersetzt wird:

add_action( 'wp_tiny_mce_init', function () {
    ?>
    <script>
    tinymce.on('SetupEditor', function (editor) {
        var orig_shortcuts_add = editor.shortcuts.add;
        editor.shortcuts.add = function(pattern, desc, cmdFunc, scope) {
            return orig_shortcuts_add(pattern, desc, function () {}, scope);
        };
    });
    </script>
    <?php
});
3
bonger

Ich dachte nur, ich teile: Ich benutze Tinymce im Frontend über wp_editor (). Ich habe die Tastaturkürzel wie Einfügen/Bearbeiten von Links usw. oder Hilfe deaktiviert und ich benutze:

<?php
                            $content = $posted['rm_details'];
                            $editor_id = 'rm_details';
                            $settings = array(
                                'media_buttons'     => false,
                                'drag_drop_upload'  => false,
                                'textarea_rows'     => '15',
                                'tinymce' => array(
                                    'content_css'               => get_template_directory_uri() . '/styles/tinymce5.css',
                                    'toolbar1'                  => 'bold,bullist,numlist',
                                    'toolbar2'                  => '',
                                    'paste_Word_valid_elements' => 'p,b,strong,li,br',
                                    'plugins'                   => '',
                                ),
                                'quicktags'         => false
                            );
                            wp_editor( esc_textarea( $content ), $editor_id, $settings ); ?>

Das Setzen von 'plugins' => '' scheint den Trick zu machen.

Auch dies scheint die Standard-Browser-Verknüpfungen für mich zu aktivieren,

Vielen Dank

Nathan

0
Nathan