[ギャラリー]マークアップを変更するにはどうすればよいですか?


8

[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> 

phpクロッパースクリプトを介してimg srcを実行したいので、リンクとimgのメイン画像ソースが必要です。

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

回答:


3

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

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 );

本当に複雑なクロップを実行して、別のスクリプトで処理する必要がありadd_image_size()ますか?


1

dlリストをul、追加の属性を介してこれを要求するギャラリーだけでなく、すべてのギャラリーのリストに変更する場合post_gallerygallery_shortcode関数の先頭で実行されるフィルターにフックできます。そこで、属性のデフォルト値を上書きおよび設定できます。

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


-2

これが今私がやっていることです。ギャラリーのショートコードを表示するコードと、残りのコンテンツを表示するコードの2つがあります。

最初のコードは次のとおりです。

$ gallery = '';
$ match = '/(\[)(gallery).*?(ids).*?(\])/';
$ matches = '';
preg_match($ match、get_the_content()、$ matches、PREG_OFFSET_CAPTURE);
if($ matches):
    $ matches = $ matches [0];
    $ gallery = $ matches [0];
    エコー '';
    do_shortcode($ gallery);
    エコー '';
endif;

そして2番目のもの:

$ match = '/(\[)(gallery).*?(ids).*?(\])/';
$ content = preg_replace($ match、 ''、get_the_content());
if(!empty($ content)):
    $ content = ''。$ content。wp_link_pages(array( 'before' => ''。__( 'Pages:'、 'veento')、 'after' => ''))。'';
    $ contentを印刷します。
endif;

1
do_shortcode($gallery);何も印刷しません。そして、何の意味echo '';ですか?
fuxia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.