WordPressの投稿やコメントで使えるタグを追加する

WordPressの投稿やコメントで使えるタグを追加するWordPressの投稿やコメントでタグを使ったところ、タグが消されたり、属性が消されたりした経験はないだろうか?

このような現象は、記事やコメントを保存した後や、ビジュアルエディターとHTMLエディターを切り替えた後に起こっているはずた。

これは、単に禁止されているタグや属性があるからなのだが、逆に言えばきちんと許可さえしてやれば削除されなくなる。

実は、WordPressでは、入力出来るタグや属性を制限する仕組みは2つある。

1つは、HTMLエディターでの制限で、ksesというフィルターによるもの。「/wp-includes/kses.php」での制限である。

この制限は、HTMLエディターを利用する投稿画面とコメント欄で有効であるが、管理者権限を持つものには適応されないので、管理者として記事を投稿し、コメントを書いているなら、そもそも制限はないので無視して良い。

もし何かの事情で許可したいなら「/wp-includes/kses.php」に記述されている配列にタグや属性を追加すれば良い。

投稿画面の場合は、

	$allowedposttags = array(
		'address' => array(),
		'a' => array(
			'class' => array (),
			'href' => array (),
			'id' => array (),
			'title' => array (),
			'rel' => array (),
			'rev' => array (),
			'name' => array (),
			'target' => array()),
		'abbr' => array(
			'class' => array (),
			'title' => array ()),

にタグや属性を追加する。

コメント欄の場合は、

	$allowedtags = array(
		'a' => array(
			'href' => array (),
			'title' => array ()),
		'abbr' => array(
			'title' => array ()),
		'acronym' => array(
			'title' => array ()),
		'b' => array(),

に付け加えれば良い。

上記と同じような記述は、プラグインやfunctions.phpでも書くことが出来る。

私は、コメントで使えるタグを追加で許可する構文をプラグイン中で書いているので、それを参考にまとめておく。

function my_allowedtags_in_comments($data) {
	global $allowedtags;
	$allowedtags['pre'] = array(
				'name'=>array(),
				'class'=>array());
	$allowedtags['script'] = array(
				'type'=>array(),
				'class'=>array());
	$allowedtags['textarea'] = array(
				'name'=>array(),
				'class'=>array());
	return $data;
}

add_filter('comments_open','my_allowedtags_in_comments');
add_filter('pre_comment_approved','my_allowedtags_in_comments');

上記の方法なら、コメント欄の下の「次のHTML タグと属性が使えます: 」にも追加したタグと属性が表示される。

これを表示させたくないなら、

function my_allowedtags_in_comments($data) {
	global $allowedtags;
	$allowedtags['pre'] = array(
				'name'=>array(),
				'class'=>array());
	$allowedtags['script'] = array(
				'type'=>array(),
				'class'=>array());
	$allowedtags['textarea'] = array(
				'name'=>array(),
				'class'=>array());
	return $data;
}

add_filter('preprocess_comment','my_allowedtags_in_comments');

と書くと良いだろう。

続いてビジュアルエディター(TinyMCE)での制限だが、これも緩めることが出来る。

私は、プラグインに次のような記述を追加している。

function my_mce_valid_elements($init) {
    if (isset($init['extended_valid_elements']) && !empty($init['extended_valid_elements'])) {
        $init['extended_valid_elements'] .= ',' . 'pre[name|class]';
        $init['extended_valid_elements'] .= ',' . 'textarea[name|class|cols|rows]';
    } else {
        $init['extended_valid_elements'] = 'pre[name|class]';
        $init['extended_valid_elements'] .= ',' . 'textarea[name|class|cols|rows]';
    }
    return $init;
}

add_filter('tiny_mce_before_init', 'my_mce_valid_elements');

以下のような形式で書けば良い。

$init['extended_valid_elements'] .= ',' . 'タグ[属性1|属性2|属性3|・・・]';

ただし、ビジュアルエディターの場合は、どのようなタグでも許可できるわけではないようである。



PHP, WordPress, ネット・PC, , , , Permalink