Wordpressのデフォルトのギャラリーをカスタマイズして、各項目に対して次のような形式になるようにします。
<dl class="gallery-item imgteaser">
<a rel="lightbox-cats" href="http://mydomain.com/link/to/image.jpg" title="Image caption (if any)" name="image.jpg (image file name)">
<img width="150" height="150" src="http://mydomain.com/link/to/image-150x150.jpg" class="attachment-thumbnail" alt="002" title="002">
</a>
</dl>
基本的に、私はリンク(<a>
)に以下を持たせたいです。
rel
(各ギャラリーでユーザーが手動で "lightbox-cats"と定義します)href
(例:http:// mydomain.com/link/to/image.jpg)title
name
(例:image.jpg)[ここ] と [ここ] しかし、私は不要なものを削除する方法がわからないので、それは非常に面倒になります。
たとえば、添付ファイルのページにリンクするのに<a>
は必要ありません(http:// mydomain.com/?attachment=20のようなもの)。 を画像のURLに直接でリンクするだけです。
Filterを使ってそれをfunctions.php
に追加して、これが私がこれまでにやったことです(それはとても面倒です):http:// Pastebin.com/Q51W1BVr
長すぎるのでPastebinに入れました(評判が足りないのでリンクにできないのは残念です:/)
ただし、出力を変更する部分はここからしかないと思います。
$i = 0; // Modified output from here
foreach ( $attachments as $id => $attachment ) {
$link = wp_get_attachment_link($id, $size, true, false);
if( ! empty($rel) ) { !!! // Add rel injection
$link = str_replace('<a href=', "<a rel='$rel' href=" .wp_get_attachment_url( $attachment->ID ). " alt=", $link);
} else {
$link = str_replace('<a href=', "<a rel='$rel' href=", $link);
}
$link = str_replace("title='", "title='" . wptexturize($attachment->post_excerpt) . "' name='", $link);
$output .= "<{$itemtag} class='gallery-item imgteaser'>
";
$output .= $link;
$output .= "</{$itemtag}>
";
if ( $columns > 0 && ++$i % $columns == 0 )
$output .= '<br style="clear: both" />';
}
$output .= "
<br style='clear: both;' />
</div>\n";
return $output;
}
これは、出力結果がいかに面倒なのかです。
<dl class="gallery-item imgteaser">
<a rel="lightbox-cats" href="http://localhost/test/wp-content/uploads/2012/09/002.jpg" alt="http://localhost/test/?attachment_id=36" title="" name="002">
<img width="150" height="150" src="http://localhost/test/wp-content/uploads/2012/09/002-150x150.jpg" class="attachment-thumbnail" alt="002" title="002"
</a>
</dl>
動作しますが、削除する必要がないため、不要なalt="http://localhost/test/?attachment_id=36"
があります。そして私は自分のコードが本当に非効率的で汚れていると感じています。 :/
いつものWordPressと同じように、正規表現を必要とせずにこれを実行するためのフィルタがあります。何かを変更すると失敗する可能性があります。
これが出力のコードです。
<?php
add_filter('wp_get_attachment_image_attributes', function($attr, $attachment){
unset($attr['alt']); // Just deleting the alt attr
return $attr;
}, 10, 2);
$url = wp_get_attachment_url( $attachment->ID );
$name = esc_attr( $attachment->post_title );
$title = wptexturize($attachment->post_excerpt);
$text = wp_get_attachment_image( $id, $size, false );
if ( trim( $text ) == '' )
$text = $attachment->post_title;
$link = "<a href='$url'" . (!empty($rel)? " rel='$rel'":"") . " title='$title' name='$name'>$text</a>";
$attachment
オブジェクトをすでに持っているので時間が節約され、wp_get_attachment_link
がそれを再度取得するので高速です。たとえそれがメモリにキャッシュされていても、それをしない方が良いです。
コードを上記のコードに置き換えて、ループの前にadd_filter
を置くことを忘れないでください。そのため、同じフィルターを複数回作成するというオーバーヘッドがあります。
$link = wp_get_attachment_link($id, $size, true, false);
if( ! empty($rel) ) { // !!! Add rel injection
$link = str_replace('<a href=', "<a rel='$rel' href=" .wp_get_attachment_url( $attachment->ID ). " alt=", $link);
} else {
$link = str_replace('<a href=', "<a rel='$rel' href=", $link);
}
$link = str_replace("title='", "title='" . wptexturize($attachment->post_excerpt) . "' name='", $link);
ワードプレスのギャラリーのテーマを変更するための完璧なシンプルなプラグインがあります。 https://wordpress.org/plugins/gallery-theme/ このプラグインを使用すると、さまざまなギャラリーにさまざまなテーマを設定することもできます。 !