サポート » 使い方全般 » ブログ記事一覧にサムネイルをつけたいのですが

  • 解決済 kankichi

    (@kankichi)


    wordpress2.7.1で企業サイトのリニューアルをしています。
    クライアントからの要望で、ブログの記事一覧に記事に添付されている画像のサムネイルを表示して欲しいというリクエストがありました。
    最新バージョンであれば簡単にサムネイルを表示させることも出来ると思うのですが、2.7と古いバージョンなので、以下のようなコードで対応しようと思いました。

    <?php query_posts('category_name=hoge&showposts=1'); ?>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    							<div class="image"><?php echo wp_get_attachment_image() ; ?></div>
    							<h3>カテゴリータイトル</h3>
    							<dl>
    								<dt><a href="<?php echo the_permalink(); ?>"><?php echo the_title();?></a></dt>
    								<dd><a href="<?php echo the_permalink(); ?>" class="readmore">>>詳しく読む。</a></dd>
    							</dl>
    <?php endwhile; endif; ?>

    しかし、上記のコードでは表示されませんでした。
    テンプレートタグが間違えているのかと思い、wp_get_attachment_imageの部分をthe_IDなど他のタグを入れてみたら、動いた(表示された)のでタグは間違えていないようなのですが…。
    試しにwp_get_attachment_imageに添付画像のIDを指定してみたら、表示されました。
    「ひょっとしたら、記事のIDと添付画像のIDのひもづけがうまくいっていない(もしかしたらできない)のか?」とも考えたのですが、もともと専門ではないので、確証が持てません。

    お聞きしたいのは以下2点。

    • 上記のコードで実現出来ない理由。
    • 実現する為の代替え案

    プラグインでの実装も考えているのですが、現状ですごい量のプラグインがインストールされてしまっているので、これ以上は増やすと管理も面倒になるし、後々のメンテナンス性も考えると、「出来ればWP自体の機能を使って実現したい」と思っているので、最終手段として残してあります。
    もしWPの機能で実現出来ないのであれば、プラグインでの実装に考えをシフトします。

    もし心当たりのある方がいらっしゃいましたら、どうぞご教示いただければと思います。

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • wp_get_attachment_image()に指定するのは添付画像のIDです。
    添付画像のIDは、get_children()で取得できますよ。

    トピック投稿者 kankichi

    (@kankichi)

    sysbirdさん、ご教示いただきましてありがとうございます。

    …申し訳ありません、get_children()の使い方がよくわからないのですが…Codexの例文を参照にコードの方を書き直してみました。

    <?php query_posts('category_name=hoge&showposts=1'); ?>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="image">
    <?php $images = &get_children('post_type=attachment&post_mime_type=image'); ?>
    <?php echo wp_get_attachment_image($images) ; ?>
    <?php if ( empty($images) ) {
    	// 添付ファイルが無かった
    } else {
    	foreach ( $images as $attachment_id => $attachment ) {
    		echo wp_get_attachment_image( $attachment_id, 'full' );
    	}
    }
    //  添付ファイルが無い場合のコードを書かない方法:
    foreach ( (array) $videos as $attachment_id => $attachment ) {
    	echo wp_get_attachment_link( $attachment_id );
    }?>
    							</div>
    							<h3>カテゴリータイトル</h3>
    							<dl>
    								<dt><a href="<?php echo the_permalink(); ?>"><?php echo the_title();?></a></dt>
    								<dd><a href="<?php echo the_permalink(); ?>" class="readmore">>>詳しく読む。</a></dd>
    							</dl>
    <?php endwhile; endif; ?>

    エラーもなく動いていることは動いているのですが、どうも添付ファイルがないみたいで、代替えのアイコンが表示されてしまっています。
    添付ファイルがない場合はこの表示でも構わないのですが、投稿している記事には確かに添付ファイルがあるはずなんですが、なぜか「添付ファイルが見つかりません」という結果になってしまいます。
    何かヒントがあれば、アドバイス頂ければと思います。
    初心者丸出しの投稿で、大変恐縮ですがよろしくお願いします。

    get_children() へのパラメータに投稿IDを追加すればよいと思いますよ!

    トピック投稿者 kankichi

    (@kankichi)

    get_children() へのパラメータに投稿IDを追加すればよいと思いますよ!

    ということなんですが、パラメータに投稿ID(post_parent)を追加してしまうと、その投稿IDの添付ファイルしか表示してくれなくなってしまうと思います。
    それとも単純にpost_parentを入れるのではなく、親投稿のIDを取得して、パラメーターに代入するということでしょうか?

    パラメータに投稿ID(post_parent)を追加してしまうと、その投稿IDの添付ファイルしか表示してくれなくなってしまうと思います。

    ループの中なので$post->IDとかで取得すれば順に投稿IDを取得するんじゃないですか?

    トピック投稿者 kankichi

    (@kankichi)

    ループの中なので$post->IDとかで取得すれば順に投稿IDを取得するんじゃないですか?

    shokun0803さん、ありがとうございます。

    $post->IDでやってみたんですが、投稿IDを取得してくれませんでした。
    実際のコードは下記になります。

    <?php query_posts('category_name=trade-knowledge&showposts=1'); ?>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <div class="image">
    <?php $images = &get_children('post_type=attachment&post_mime_type=image&post_parent=$post->ID'); ?>
    <?php echo wp_get_attachment_image($images) ; ?>
    <?php if ( empty($images) ) {
    	// 添付ファイルが無かった
    } else {
    	foreach ( $images as $attachment_id => $attachment ) {
    		echo wp_get_attachment_image( $attachment_id, 'thumbnail' );
    	}
    }
    ?>
    </div>
    <h3>貿易知識</h3>
    <dl>
    	<dt><a href="<?php echo the_permalink(); ?>"><?php echo the_title();?></a></dt>
    	<dd><a href="<?php echo the_permalink(); ?>" class="readmore">>>詳しく読む。</a></dd>
    </dl>
    <?php endwhile; endif; ?>

    投稿IDを直に書くと表示されるのに、$post->IDだと表示されないというのが、何とも気持ち悪いと言うか…やっぱり取得がうまく行っていないと言う事なのでしょうか。

    ‘$post->ID’ が文字列になっているのでは?

    コードをご自身で書いているようですのでスキルレベルはそれ相応と判断して返答していますが、Codexなどでサンプルコードの書き方などを見て勉強した方がよさそうですね。
    Codexは情報の宝庫です。フォーラムだけに頼らずに目を通してみましょう、きっと素敵な発見がありますよ;)

    トピック投稿者 kankichi

    (@kankichi)

    shokun0803さん、sysbirdさんご回答ありがとうございます!

    shokun0803さんのおっしゃる通りコードは全部自分で書いているのですが、まだまだ勉強が足りなかったようです。

    Codexを参考に
    <?php $images = &get_children('post_type=attachment&post_mime_type=image&post_parent='.$post->ID.'&echo=0'); ?>
    と書き直したら、うまくIDを取得してくれたようです。(上記の書き方が果たして正しいのか弱冠不安ですが…)
    ありがとうございます!

9件の返信を表示中 - 1 - 9件目 (全9件中)
  • トピック「ブログ記事一覧にサムネイルをつけたいのですが」には新たに返信することはできません。