Wordpressの投稿には、次のようなフィールド設定の画像があります。
キャプション:このフィールドには、画像の下に表示される実際の画像キャプションが含まれています。
説明:このフィールドには、属性付きソースへのリンク付きの写真クレジットが含まれています。
このように画像の真下にこれらの値を表示する必要があります。
@toschoから この の質問への優れた答えからヒントを得て、私はこの関数を試してみました:
add_shortcode('wp_caption', 'img_caption_add_description');
add_shortcode('caption', 'img_caption_add_description');
function img_caption_add_description($attr, $content = null)
{
$post_id = str_replace('attachment_', '', $attr['id']);
$img = get_post((int)$post_id);
if (is_a($img, 'WP_Post')) {
$attr['caption'] = $img->post_content;
}
return img_caption_shortcode($attr, $content);
}
あなたがスクリーンショットで見ることができるように、それがすべてのハイパーリンクを取り除くことを除いて、機能はうまく機能します。私はそれらが必要です!リンクを尊重するように上記の機能を変更する方法はありますか?たとえば、上の例では、テキスト "Amit Schandillia"と "CC BY-SA 3.0"は両方ともハイパーリンクであることを意味しています。私の説明欄には以下のようなリンクがあります。
Photo credit: <a href="" target="_blank" rel="nofollow">Amit Schandillia</a> licensed <a href="" target="_blank" rel="nofollow"><i class="fa fa-creative-commons"></i> BY-SA 3.0</a>
投稿ページにレンダリングされるときに<a>
タグが確実に残るようにするにはどうすればよいですか。
最後の行 img_caption_shortcode()
を見ると、 wp_kses()
で許可されていないHTMLタグが削除されているのがわかります。 wp_kses_hook()
関数はフィルタをラップするだけです:
return apply_filters( 'pre_kses', $string, $allowed_html, $allowed_protocols );
タグを削除する関数として wp_kses_split()
を指定してpreg_replace_callback
を使用することで、最後に _wp_kses_split_callback()
がHTMLタグを削除する前に、フックして出力を変更することができます。
_wp_kses_split_callback()
の中では、 wp_kses_split2()
関数が呼ばれていますが、(悪い)選択肢もあります。グローバルを変更する。
コールバックには、次の2つのグローバルがあります。
global $pass_allowed_html, $pass_allowed_protocols;
次のこともできることを意味します(お勧めしません)。
// Fetch the global context
global $pass_allowed_html;
// Save the global context for restoring it to not nuke other code
$temp = $pass_allowed_html;
// Alter the context
$GLOBALS['pass_allowed_html'] = [ /* your allowed HTML tags here */ ];
// Fetch the result
$result = img_caption_shortcode();
// Reset the global context
$GLOBALS['pass_allowed_html'] = $temp;
// Return your altered result
return $result;
wp_kses_allowed_html()
がexplicit
の場合をトリガーすることに注意してください。
img_caption_shortcode()
は値string
のpost
をwp_kses()
に渡すだけなので、wp_kses_split2()
内の次の行から利益を得ることもできます。
if ( ! is_array( $allowed_html ) )
$allowed_html = wp_kses_allowed_html( $allowed_html );
[wp_kses_allowed_html()
]をもう一度見てください。
return apply_filters( 'wp_kses_allowed_html', $allowedposttags, $context );
あなたは単にこのフィルタを使うことができます。他のコンテンツと競合しないように実行した後は、必ず{ フィルタを再度削除する }してください。