web-dev-qa-db-fra.com

Supprimez complètement les mises en forme masquées lors du collage dans TinyMCE

Dans WordPress v4 +, je souhaite supprimer toute la mise en forme masquée lorsque les utilisateurs collent le contenu dans l'éditeur visuel TinyMCE.

Le bouton Coller en tant que texte fonctionne lorsque les utilisateurs insèrent du texte à partir de Microsoft Word mais ne font pas leur travail avec d'autres applications telles que Pages pour OSX.

Vous pouvez utiliser ce qui suit pour filtrer toute la mise en forme pour Word (merci Till Kruss ):

class PasteAsPlainText {

    function __construct() {

        add_action( 'admin_init', array( $this, 'init' ) );

    }

    function init() {

        add_filter( 'tiny_mce_before_init', array( $this, 'forcePasteAsPlainText' ) );
        add_filter( 'teeny_mce_before_init', array( $this, 'forcePasteAsPlainText' ) );
        add_filter( 'teeny_mce_plugins', array( $this, 'loadPasteInTeeny' ) );
        add_filter( 'mce_buttons_2', array( $this, 'removePasteAsPlainTextButton' ) );

    }

    function forcePasteAsPlainText( $mceInit ) {

        global $tinymce_version;

        if ( $tinymce_version[0] < 4 ) {
            $mceInit[ 'paste_text_sticky' ] = true;
            $mceInit[ 'paste_text_sticky_default' ] = true;
        } else {
            $mceInit[ 'paste_as_text' ] = true;
        }

        return $mceInit;
    }

    function loadPasteInTeeny( $plugins ) {

        return array_merge( $plugins, (array) 'paste' );

    }

    function removePasteAsPlainTextButton( $buttons ) {

        if( ( $key = array_search( 'pastetext', $buttons ) ) !== false ) {
            unset( $buttons[ $key ] );
        }

        return $buttons;

    }

}

new PasteAsPlainText();

Et vous pouvez ensuite masquer le bouton Coller en tant que texte (pour empêcher les utilisateurs de le désélectionner) en sélectionnant les boutons à afficher:

function formatTinyMCE( $in ) {
    $in['toolbar1'] = 'bold,custom_em,blockquote,aligncenter,link,unlink,spellchecker,undo,removeformat';
    return $in; 
}
add_filter( 'tiny_mce_before_init', 'formatTinyMCE' );

Maintenant que Word est sur le chemin (enfin), comment pouvons-nous supprimer complètement tout formatage caché collé dans TinyMCE?

UPDATE: Une approche pourrait être de trouver une option init telle que paste_Word_valid_elements et d’avoir une liste vide de balises valides.

6
Christine Cooper

Je ne comprends pas très bien ce dont vous avez besoin, mais je pense que vous essayez d’insérer du texte en clair à partir de n’importe où: Navigateur, M $ Word, Pages.

Pour cela, vous pouvez utiliser Configuration avancée de TinyMCE plugin. Après le téléchargement et l'activation de ce plugin, une configuration manuelle est requise. Cette solution est meilleure que le code que vous avez suggéré dans la section question ci-dessus).

Option name                  Value
paste_strip_class_attributes all
paste_remove_spans           true
paste_remove_styles          true
paste_as_text                true
paste_text_sticky            true
block_formats                Paragraph=p;Header 2=h2;...

Toutes ces parties (paramètres) de config peuvent être basées sur Pages de documentation Tiny MCE .

  1. paste_strip_class_attributes - ancien attribut de 3.?.? version permettant de supprimer tous les attributs de balises tels que href, alt, class, onError, ..
  2. paste_remove_spans - également à partir de 3.?.? version. Vous permet de supprimer tous les éléments span (en ligne?) Lors du collage.
  3. paste_remove_styles - Si la valeur est true, supprime toutes les informations de style lors du collage, quel que soit le type de navigateur. Coller à partir de Word 2000 provoquera une erreur de tinyMCE.
  4. paste_as_text - Cette option vous permet de définir l'état par défaut de l'option de menu "coller en tant que texte". Il est désactivé par défaut mais peut être forcé par défaut.
  5. paste_text_sticky - Conserve la fonction Coller le texte jusqu'à ce que l'utilisateur désélectionne le bouton Coller en tant que texte.
  6. block_formats - configuration supplémentaire pour mon site :)

Cette configuration fonctionne correctement sur mes sites et j'insère toujours du texte dans TinyMCE comme un texte brut.

Egalement utile plugin pour le réglage TinyMCE TinyMCE Advanced .

1
Kolya Korobochkin