web-dev-qa-db-fra.com

Ajouter des boutons TinyMCE sans enlever les boutons du plugin?

Je développe un plugin que je vais installer pour tous mes clients afin de rendre WordPress un peu plus facile à utiliser pour eux. Une des choses à changer est la configuration par défaut de TinyMCE. Cela ajoutera des éléments tels que underline et justifyfull à la première ligne de TinyMCE.

Je sais que je pourrais utiliser d'autres plugins comme TinyMCE Advanced pour modifier TinyMCE pour mes clients, mais ils ajoutent une grande quantité de ballonnements inutiles pouvant entraîner des problèmes lors des mises à jour. . Je veux rendre cela aussi minimaliste que possible afin d'éviter les problèmes de mise à jour.

J'ai écrit ce code simple qui fonctionne généralement très bien:

function mo_change_mce_buttons( $initArray ) {
    $initArray['theme_advanced_buttons1'] = 'bold,italic,underline,strikethrough,|,bullist,numlist,blockquote,|,justifyleft, justifycenter,justifyright,justifyfull,|,link,unlink,wp_more,|,spellchecker,fullscreen,wp_adv';
    return $initArray;
}
add_filter('tiny_mce_before_init', 'mo_change_mce_buttons');

Ce code fonctionne très bien, sauf pour un énorme problème. Il désactive les plug-ins TinyMCE de la ligne TinyMCE en question (theme_advanced_buttons1). Le plug-in Vipers Video Quicktags , par exemple, qui ajoute un bouton YouTube, est supprimé à l'aide du code ci-dessus.

Comment puis-je modifier la première ligne TinyMCE par défaut en utilisant un code simple dans mon propre plug-in sans sacrifier la possibilité pour d'autres plug-ins d'y ajouter des boutons?

1
kristofferR

tiny_mce_before_init est un filtre qui obtient la configuration complète de TinyMCE , mais il existe des filtres qui agissent sur de plus petites parties, comme mce_buttons pour les boutons uniquement . L'avantage ici est qu'ils agissent sur les tableaux, il est donc facile d'en ajouter ou d'en supprimer des parties. C’est comment le Viper Video Quicktags le fait aussi.

Vous pouvez modifier votre code en l'extrait suivant pour insérer les boutons aux bons endroits et ne pas supprimer les boutons ajoutés par d'autres plug-ins:

add_filter( 'mce_buttons', 'wpse17686_mce_buttons' );
function wpse17686_mce_buttons( $old_buttons )
{
    $new_buttons = array();
    foreach ( $old_buttons as $button ) {
        $new_buttons[] = $button;
        if ( 'italic' == $button ) {
            $new_buttons[] = 'underline';
        }
        if ( 'justifyright' == $button ) {
            $new_buttons[] = 'justifyfull';
        }
    }
    return $new_buttons;
}
1
Jan Fabry