サポート » 使い方全般 » ギャラリーの最初の1枚を取得したい

  • プラグインは使用せず、WPの投稿画面で「メディアを追加」「ギャラリーの作成」から、
    ギャラリーを表示するサイトを作っております。

    category.phpをテンプレとして、投稿ギャラリー(アルバム)の一覧

    ◆aaaアルバム
    ◆bbbアルバム
    ◆cccアルバム

    といった感じで表示され、

    single.phpをテンプレとして、上記のアルバムの詳細ページ(アルバム内の画像一覧)
    までは正常に表示されております。

    ここから、category.phpをテンプレとした投稿ギャラリー(アルバム)の一覧には、
    ギャラリー内の最初の1枚を、サムネイルとして表示する。
    ということをやりたいのですが、うまくいきません。

    こちらの記事を参考に、category.phpに、

    <?php
    $files = get_children('post_parent=' . $post->ID . '&post_type=attachment&post_mime_type=image/jpeg');
    $keys = array_keys($files);
    $num = $keys[0];
    $img_url = wp_get_attachment_image($num, 'medium');
    ?>

    と書いてみましたが、なにも表示されません。

    https://ja.forums.wordpress.org/topic/5525?replies=3

    どなたかご教授いただけませんでしょうか?
    宜しくお願いいたします。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • 2点ご確認ください。

    1.上記コードがループ内に書かれているかという点
    2.$img_urlをechoしているかどうか

    トピック投稿者 sarasarari

    (@sarasarari)

    ikaring様

    ご返信をありがとうございました。

    1番目のループ内かどうかは、ループ内です。

    2番目のは、勉強不足でよく分かりません。
    申し訳ありません。

    現在は何も表示しない状況です。
    宜しくお願いいたします。

    参考にされたページの最後のコード内に
    <?php echo $img_url; ?>
    という箇所があります。
    $img_urlという変数に入っている内容を画面に書き出す(echo)というような命令です。
    これがないと何も表示されないと思います。

    トピック投稿者 sarasarari

    (@sarasarari)

    ikaring様

    ありがとうございます。
    ご指摘の
    <?php echo $img_url; ?>
    を入れたところ、7つギャラリーの投稿があるうちの、
    新しい投稿から3番目のギャラリーのみ、表示されました。

    どういうことでしょうね。
    先ほどのコードの上に
    <?php the_title(); ?>
    を入れると7件のタイトルは表示されますか?

    ループがどうなっているのか、見せていただいた方が良いですかね。

    あと、画像はすべてjpgなのかなど。もしPNGとかも混じっていているのであれば、&post_mime_type=image/jpegは取ったほうがいいかもしれません。
    $files = get_children('post_parent=' . $post->ID . '&post_type=attachment');

    7件取得出来ているかはvar_dump($files);した方が手っ取り早いかも。

    ID順(アップロード順)にギャラリーに挿入していない場合、配列内の順番が実際に挿入した順番とは異なりますし、また他の投稿にも試用していたりするなど、親子関係が保存されていなかったりするメディアの場合これでは取得されません。

    なるほど、そういうことがあるんですね。勉強になります。

    galleryショートコードのid要素からIDを取得してget_postsするという、下記ページのコードがあったのですが、これならいけそうですかね?
    4番目の投稿ので、コメントに書かれていることも加味して少し手を入れたほうが良さそうですが。
    http://wordpress.stackexchange.com/questions/89307/wordpress-grab-first-image-from-gallery

    もっと良い方法があるでしょうか。

    トピック投稿者 sarasarari

    (@sarasarari)

    ikaring様
    Hinaloe様

    ご丁寧な回答をありがとうございます。

    <?php the_title(); ?>
    は、既に入れてあり、問題なく表示されております。
    
    <ul class="upall">
        <?php if(have_posts()): ?>
    	<?php while(have_posts()): the_post(); ?>
        	<li class="pa_clume">
            	<p class="al_title"><?php the_title(); ?></p>
    
                <p class="mini_showphoto"><a href="<?php the_permalink(); ?>"><img src="<?php bloginfo('template_url'); ?>/images/but_showthephoto.png"></a></p>
    
                <?php
    $files = get_children('post_parent=' . $post->ID . '&post_type=attachment&post_mime_type=image/jpeg');
    $keys = array_keys($files);
    $num = $keys[0];
    $img_url = wp_get_attachment_image($num, 'medium');
    ?>
    <?php echo $img_url; ?>
    
            </li>
        <?php endwhile; ?>
            <br class="clear">
        <?php else: ?>
                    現在記事はありません
    				<?php endif; ?>
    
        </ul>

    コードはこんか感じです。

    検証できてないですけど、こんな感じでどうでしょうか。

    <ul class="upall">
    	<?php if(have_posts()): ?>
    	<?php while(have_posts()): the_post(); ?>
    	<?php
    		// helper function to return first regex match
    		// この関数はfunctions.phpとかにあったほうがいいのかな
    		function get_match( $regex, $content ) {
    		    preg_match( $regex, $content, $matches );
    		    return $matches[1];
    		} 
    
    		// Extract the shortcode arguments from the $page or $post
    		$shortcode_args = shortcode_parse_atts( get_match( '/\[gallery\s(.*)\]/isU', $post->post_content ) );
    		$ids = explode( ',' , $shortcode_args[ "ids" ]);
    		$img_url = wp_get_attachment_image( $ids[0], 'medium' );
    
    	?>
    	<li class="pa_clume">
    		<p class="al_title"><?php the_title(); ?></p>
    
    		<p class="mini_showphoto"><a href="<?php the_permalink(); ?>"><img src="<?php echo get_stylesheet_directory_uri(); ?>/images/but_showthephoto.png"></a></p>
    
    		<?php echo $img_url; ?>
    
      </li>
      <?php endwhile; ?>
          <br class="clear">
      <?php else: ?>
          現在記事はありません
    	<?php endif; ?>
    
    </ul>

    標準のgalleryを使用している場合なら、或いはgallery_shortcode内のどっかのフィルターに引っ掛けてIDを取り出せるようにすることも……どこに引っ掛けるかだとかどう書くかとかは考えてないけど難しくはなく出来そう。

    gallery_shortcode()

    nobita

    (@nobita)

    こんにちは

    画像数の取得や、アタッチメントIDの取得 よろしければ 以下のようなやり方でも出来そうでした。

    http://tenman.info/labo/snip/archives/7261

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「ギャラリーの最初の1枚を取得したい」には新たに返信することはできません。