私はWordpress(3.3)でクライアントウェブサイトを開発していますが、画像キャプション機能がHTMLタグを削除することを発見しました。
結果のキャプションはプレーンテキストであり、適切な画像のクレジット化が困難になります。クライアントWebサイトでもあるため、WYSIWYG編集が必要です。
例えば私のショートコードが
[caption caption="This is my <em>example</em> caption"]
<a href="http://example.com/image.jpg">
<img src="http://example.com/image-300x224.jpg" alt=""/>
</a>
[/caption]
タグは、caption属性から次のように削除されます。
[caption caption="This is my example caption"]
<a href="http://example.com/image.jpg">
<img src="http://example.com/image-300x224.jpg" alt=""/>
</a>
[/caption]
最も保存したいタグは<em>
、<sup>
、<sub>
、<span>
そして<a>
です。
リンク以外にこれを修正するための既存のプラグインが見つかりませんでした。
これをどのように進め、どの関数をオーバーライドするかについてのアイデアはありますか?
バージョン3.4でより良いサポートが追加されることをうれしく思いますが、現時点では[caption]ショートコードを使用しないように画像挿入の動作を変更することで問題を解決しました。
これがfunctions.phpに追加したものです。
add_filter( 'disable_captions', create_function('$a', 'return true;') );
function image_send_to_editor_2($html, $id, $caption, $title, $align, $url, $size, $alt) {
if ( !$caption ) {
return $html;
} else {
$width = 'auto';
if ( preg_match( '/width="([0-9]+)/', $html, $matches ) ) {
$width = $matches[1] . 'px';
}
$output = '<div id="attachment-' . $id . '" class="wp-caption align' . $align . '" style="width: ' . $width . ';">';
$output .= $html;
$output .= '<p class="wp-caption-text">' . $caption . '</p>';
$output .= '</div>';
return $output;
}
}
add_filter('image_send_to_editor', 'image_send_to_editor_2', 10, 8);
これは、 TinyMCE Advanced プラグインの<p>
および<br />
タグの削除(および追加)を無効にするオプションが有効になっている場合に最も効果的です。
さて、あなたの問題は面白いようです。
私が考えることができることの一つは、次のとおりです。
[caption caption="caption1"]
<a href="http://example.com/image.jpg">
<img src="http://example.com/image-300x224.jpg" alt=""/>
</a>
[/caption]
投稿のカスタムメタフィールドを「caption1」という名前とHTMLのキャプションで保存します。 postmetaから引っ張って、すべてのcaption1をHTMLのキャプションに変換するには、the_content()
のフィルターを使用します。
まず第一に、あなたはそのようなキャプションに物を入れることができます:
[caption ...]
<a ...> ... </a>
Your caption text
[/caption]
これはほとんどのフォーマットHTMLで機能します。リンクの場合は失敗(iirc)し、キャプションを希望どおりに配置できない場合もあります。
ただし、キャプションのショートコードによって生成されるものは、notサニタイズされます。したがって、私の回避策は優れた、これまでにない便利なプラグイン Shortcode Exec PHP を使用し、このPHPでショートコードcaptiontext
を作成します。
return '<div style="text-align: center; margin: 5px 0px -20px 0px;">'.do_shortcode($content).'</div>';
スタイリング情報を好みに合わせて調整してください。これで次のように使用できます
[caption ...]
<a ...> ... </a>
[captiontext]Your caption text[/captiontext]
[/caption]
必要なすべてのHTMLを使用できます。
編集:このソリューションの利点:Wordpressおよびあなたの好みの将来の変更に対して(比較的)安定しています。ショートコードが現在のように処理されている限り、ショートコードの定義を調整して、これまでに書いたすべての投稿の変更を補正することができます。さらに、回避策はWordpressの自然な流れにうまく統合されています。特に、キャプションで他のショートコードを使用できます。最後になりましたが、回避策としてテーマやコアファイルを変更する必要はありませんが、代わりに成熟したプラグインを使用してください。