web-dev-qa-db-ja.com

投稿/ページに埋め込まれたセルフホスト画像周辺のリンクへのクラスの適用

だから私はライトボックスの目的のために画像の周りのリンクにクラスを追加する必要があります。ただし、アップロードディレクトリからの画像にのみ適用され、外部の画像には適用されません。私はここで@TommiForsström によってこの解決策を見つけました

function add_colorbox_class_to_image_links($html, $attachment_id, $attachment) {
$linkptrn = "/<a[^>]*>/";
$found = preg_match($linkptrn, $html, $a_elem);

// If no link, do nothing
if($found <= 0) return $html;

$a_elem = $a_elem[0];

// Check to see if the link is to an uploaded image
$is_attachment_link = strstr($a_elem, "wp-content/uploads/");

// If link is to external resource, do nothing
if($is_attachment_link === FALSE) return $html;

if(strstr($a_elem, "class=\"") !== FALSE){ // If link already has class defined inject it to attribute
    $a_elem_new = str_replace("class=\"", "class=\"colorbox ", $a_elem);
    $html = str_replace($a_elem, $a_elem_new, $html);
}else{ // If no class defined, just add class attribute
    $html = str_replace("<a ", "<a class=\"colorbox\" ", $html);
}

return $html;
}

add_filter('image_send_to_editor', 'add_colorbox_class_to_image_links', 10, 3);

それがうまくいかないことを除いて、それはまさに私が必要とするもののように見えます。私はクリーンなWP 13から13のインストールでも試しました。何かご意見は?ありがとうございます。

1
Nikita

さて、私は自分のばかげた質問に答えます。 Nice fellowが説明したように、image_send_to_editorフィルタはget_image_send_to_editor関数内で実行されます。この関数は、エディタに送信される画像を囲むリンクHTMLを送信する役割を果たします。このフィルタは、Media Uploaderを使用してエディタに画像を挿入したときに実行されます。既存の投稿やページの既存の画像には適用されません。

2
Nikita