web-dev-qa-db-ja.com

Wordpressのデフォルトのギャラリー出力をカスタマイズする

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"と定義します)
  • 画像の直接URLにリンクしているhref(例:http:// mydomain.com/link/to/image.jpg)
  • Wordpressの画像キャプション用の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"があります。そして私は自分のコードが本当に非効率的で汚れていると感じています。 :/

1
deathlock

いつもの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);
2
Webord

ワードプレスのギャラリーのテーマを変更するための完璧なシンプルなプラグインがあります。 https://wordpress.org/plugins/gallery-theme/ このプラグインを使用すると、さまざまなギャラリーにさまざまなテーマを設定することもできます。 !

0
Michael