web-dev-qa-db-ja.com

プラグインボタンを削除せずにTinyMCEボタンを追加しますか?

WordPressを少し使いやすくするために、すべてのクライアントにインストールするプラグインを開発しています。変更されることの1つは、デフォルトのTinyMCE設定です。最初のTinyMCE行にunderlinejustifyfullのようなものを追加します。

私は私のクライアントのためにTinyMCEを変更するのに TinyMCE Advanced のような他のプラグインを使うことができることを知っています。更新の問題を避けるために、これをできる限り最小限に抑えるようにします。

私はこの簡単なコードを書きましたが、大体うまくいきます:

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');

このコードは、1つの大きな問題を除いて非常にうまく機能します。問題のTinyMCE行にあるTinyMCEプラグインを無効にします(theme_advanced_buttons1)。 たとえば、YouTubeボタンを追加するVipers Video Quicktagsプラグイン は、上記のコードを使用して削除されます。

他のプラグインがボタンを追加する可能性を犠牲にせずに、自分のプラグインの単純なコードを使用してデフォルトの最初のTinyMCE行を変更する方法を教えてください。

1
kristofferR

tiny_mce_before_initはTinyMCE全体の設定を取得するフィルタです しかし、ボタンのためだけの mce_buttonsのように、その小さな部分に作用するフィルタがあります 。ここでの利点は、それらが配列に作用するということですので、それらに部分を追加したり削除したりするのは簡単です。これは Vipers Video Quicktagsがどのように行うのか でもあります。

適切な場所にボタンを挿入し、他のプラグインが追加したボタンを削除しないように、コードを次のスニペットに変更できます。

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