WordPressの管理画面から記事を更新しようとしたら、エディタ切替の「テキスト」をクリックしてもテキストエディタに切り替わらない、というご相談がありましたので調査しました。
このトラブルの原因は「PS Disable Auto Formatting」というプラグインでした。TinyMCE Advancedと併用するとビジュアル/テキストの切替ができなくなります。
「PS Disable Auto Formatting」自体、最終更新が3年前なので使わないほうが良いでしょう。
プラグインを使わずに自動整形を無効にする方法
トラブルの原因となった「PS Disable Auto Formatting」を使わずにWordPressの自動整形を無効にするには、functions.phpに以下を追加します。
remove_filter( 'the_content', 'wpautop' );
WordPressでは、ふつうの引用符をスマート引用符へ変えたり、特定の記号の並びをアポストロフィ、ダッシュ、省略符号(…)、商標記号、乗算記号などへ変えたりするフィルターも標準で追加されているので、これも不要な場合はfunctions.phpに以下を追加します。
remove_filter( 'the_content', 'wptexturize' );
テキストウィジェットの自動整形を無効にする
WordPress4.8からは、テキストウィジットにもビジュアルエディタが標準装備となっているので、こちらも自動整形を無効にするにはfunctions.phpに以下を追加します。
remove_filter( 'widget_text_content', 'wpautop' ); remove_filter( 'widget_text_content', 'wptexturize' );
自動整形以外の各種変換を無効にする
ビジュアルエディタでの各種変換を無効にするには、functions.phpに以下を追加します。
function custom_tiny_mce_before_init( $init_array ) { global $allowedposttags; $init_array['valid_elements'] = '*[*]'; // タグの属性をすべて許可(削除されないように) $init_array['extended_valid_elements'] = '*[*]'; // 拡張属性をすべて許可(削除されないように) $init_array['valid_children'] = '+body[style],+div[div|span],+span[span]'; // 空タグや、属性なしのタグを消さない $init_array['indent'] = true; // インデントを有効に $init_array['wpautop'] = false; // テキストやインライン要素を自動的にpタグで囲む機能を無効に $init_array['force_p_newlines'] = false; // 改行したらpタグを挿入する機能を無効に return $init_array; } add_filter( 'tiny_mce_before_init', 'custom_tiny_mce_before_init' );
コメント(//より後)を参考にして、必要なものだけ残して記述してください。
「PS Disable Auto Formatting」を使っていない場合
「WP-MarkDown」というプラグインが原因と言う事例もあるようです。
ビジュアルエディタが使えないと言う場合は、「ユーザー」→「あなたのプロフィール」の設定画面に「ビジュアルリッチエディターを使用しない」にチェックが入っているか確認してみましょう。