web-dev-qa-db-ja.com

[gallery]マークアップを変更するにはどうすればいいですか?

[gallery]で作成したマークアップを標準のもの(dl)から順不同のリストに変更したいと思います。以下は望ましいマークアップです。

<ul>
    <li><a href="/path/to/image.jpg"><img src="/path/to/image.jpg" /></a></li>
    <li><a href="/path/to/image2.jpg"><img src="/path/to/image2.jpg" /></a></li>
    <!-- And so on, all in one ul -->
</ul> 

リンク&imgのメインの画像ソースが欲しいのですが、私はphpの切り抜きスクリプトを通してimg srcを実行したいのです。

これは可能ですか?私たちはそれをクラックできると確信しています!

8
PaulAdamDavis

Jan&Rarst、お返事をありがとう。彼らは私を正しい方向に向けました。これが私が最後になったものです。

これにより、コンテンツ内のショートコードが無効になります。このサイトに最適です。この機能は添付された画像を取得し、それらをリストとして吐き出します。 (私はどこかにその機能を見つけました、そしてそれを少しスリムにしました)

// Removed shortcodes from the content
add_filter('the_content', 'strip_shortcodes');

// Get attached images & spits out a list of them.
function nerdy_get_images($size = 'thumbnail', $limit = '0', $offset = '0') {
    global $post;
    $images = get_children( array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC', 'orderby' => 'menu_order ID') );
    if ($images) {
        $num_of_images = count($images);
        if ($offset > 0) : $start = $offset--; else : $start = 0; endif;
        if ($limit > 0) : $stop = $limit+$start; else : $stop = $num_of_images; endif;
        $i = 0;
        foreach ($images as $image) {
            if ($start <= $i and $i < $stop) {
            $img_title = $image->post_title;   // title.
            $img_description = $image->post_content; // description.
            $img_caption = $image->post_excerpt; // caption.
            $img_url = wp_get_attachment_url($image->ID); // url of the full size image.
            $preview_array = image_downsize( $image->ID, $size );
            $img_preview = $preview_array[0]; // thumbnail or medium image to use for preview.
            ?>
            <li>
                <a href="<?php echo $img_url; ?>"><img src="<?php echo $img_preview; ?>" alt="<?php echo $img_caption; ?>" title="<?php echo $img_title; ?>"></a>
            </li>
            <?
            }
            $i++;
        }
    }
}

これはsingle.phpの呼び出しです

<ul>
    <?php nerdy_get_images('medium','0','0'); ?>
</ul>

これは私がそれを望んでいたように正確にリストを吐き出す。

もう一度、みんなありがとう!

3
PaulAdamDavis

gallery_shortcode()関数の項目の出力はフィルタ処理されていないため、そこで変更することはできません。マークアップは、開始時に実行されるpost_galleryフィルタを使用して完全に置き換えることができます。これは通常のフィルタリングの最終結果と比べると少し変わったことであり、おそらくパフォーマンス上の理由によるものです(ギャラリの生成は計算量がかなり多くなる可能性があります)。

しかしそれはリンクを生成するために wp_get_attachment_link() を使い、その出力はたくさんの詳細でwp_get_attachment_linkフックを通してフィルタリングされます。

apply_filters( 'wp_get_attachment_link', "<a href='$url' title='$post_title'>$link_text</a>", $id, $size, $permalink, $icon, $text );

別々のスクリプトで処理したい、本当に複雑なトリミングを実行する必要がありますか?WPに add_image_size() で処理させないでください。

3
Rarst

追加の属性でこれを要求するものだけでなく、すべてのギャラリーでdlリストをulリストに変更したい場合は、 post_gallery関数 の最初に実行されるgallery_shortcodeフィルターにフックできます。そこで、属性を上書きしてデフォルト値を設定できます。

最終的な出力はフィルタリングされていませんが、galleryのデフォルトのショートコードハンドラを削除し、最後にgallery_shortcode()をラップする独自の関数を追加することは可能であるべきです。あるいはRarstが提案しているようにwp_get_attachment_linkにフックしてみてください

1
Jan Fabry