WordPressはビジュアルエディタメインで使う派です。
HTML打ち込む際はテキストエディタに切り替えるんですが、そこからビジュアルエディタに戻ると消えるHTMLタグ、ありますよね。
それを自分で調整する方法を。
TinyMCE のおかげ
WordPress 管理画面、投稿エディタは TinyMCE というオープンソースのエディタが使われています。
その設定で、デフォルトでは <style>~や<link rel="stylesheet"~ が使えないようになっているわけです。
WordPress 4.0 デフォルトの TinyMCE 設定
/wp-includes/class-wp-editor.php 465行目で定義されています。
self::$first_init = array(
'theme' => 'modern',
'skin' => 'lightgray',
'language' => self::$mce_locale,
'formats' => "{
alignleft: [
{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'left'}},
{selector: 'img,table,dl.wp-caption', classes: 'alignleft'}
],
aligncenter: [
{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'center'}},
{selector: 'img,table,dl.wp-caption', classes: 'aligncenter'}
],
alignright: [
{selector: 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles: {textAlign:'right'}},
{selector: 'img,table,dl.wp-caption', classes: 'alignright'}
],
strikethrough: {inline: 'del'}
}",
'relative_urls' => false,
'remove_script_host' => false,
'convert_urls' => false,
'browser_spellcheck' => true,
'fix_list_elements' => true,
'entities' => '38,amp,60,lt,62,gt',
'entity_encoding' => 'raw',
'keep_styles' => false,
'cache_suffix' => 'wp-mce-' . $GLOBALS['tinymce_version'],
// Limit the preview styles in the menu/toolbar
'preview_styles' => 'font-family font-size font-weight font-style text-decoration text-transform',
'wpeditimage_disable_captions' => $no_captions,
'wpeditimage_html5_captions' => current_theme_supports( 'html5', 'caption' ),
'plugins' => implode( ',', $plugins ),
);
どうやって WordPress の TinyMCEエディタで <style>~や<link rel=”stylesheet”~ を使えるようにするのか
本家 TinyMCE のドキュメントを見ました。
Configuration の項を見ていくと、発見。
親要素内の子要素を制御できるやつ。
この設定で WordPress さんの制御を操ることができそう。
+で追加、-で削除。親要素[子要素|子要素] みたいな感じで | で区切る。
* アスタリスクは使えなくなった模様。
TinyMCE init 前のフックに <style>~や<link rel=”stylesheet”~ を使えるように設定を追加する
TinyMCE init のフックを使って functions.php にでも書いてやります。
/**
* WordPress の TinyMCE エディタで meta, style, link など使えるようにする
*
* @author hayashikejinan
* @copyright Copyright (c) 2014, hayashikejinan
* @link /?p=1184
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* @param $settings
*
* @return mixed
*/
function additional_tags_for_tiny_mce( $settings ) {
if ( ! empty( $settings['valid_children'] ) ) {
$settings['valid_children'] .= ';';
} else {
$settings['valid_children'] = '';
}
$settings['valid_children'] .= '+body[link|meta|style],+div[span|meta],+span[span|meta]';
return $settings;
}
add_filter( 'tiny_mce_before_init', 'additional_tags_for_tiny_mce' );
これでOK。
TinyMCE エディタ内は body から始まるので大元は body 。
アンカータグ a 内にブロック要素の div や span は指定しても効かないようにそもそも作られています。
functions.php イヤだ!な人はプラグインで
TinyMCE の Configuration を操るプラグインがあります。
インストール→有効化し、設定→TinyMCE Config より。
こんな感じで指定してやればいいです。

ホホまとめ
なんでこれが必要だったかというと、Scheme.org の Microdata が消え去ってしまうのをどうにかしたかったからなんですよね。
それは次回に。

コメント、してみません?