web-dev-qa-db-ja.com

添付ファイルを表示するにはwp_get_attachment_image()を使用してください。

私は本当にこれがfacepalmの瞬間であることを望みます、b/c私はこれに不満を感じています。特定の添付ファイル画像を表示するためのクイックループを作成します。それをコーデックスからほぼまっすぐ引き上げましたが、wp_get_attachment_image()は思ったように動作しません。

wp_get_attachment_imageのID部分は添付ファイルのIDではありませんか?添付ファイルの投稿IDと同じではありませんか。

$args = array(
        'post_type' => 'attachment',
        'post_mime_type' => array('image','image/jpeg','image/png','image/gif'),
        'numberposts' => 5,
        'order' => 'ASC',
        'orderby' => 'post_title'
    );


$attachments = get_posts( $args );
     if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
           echo wp_get_attachment_image( $attachment->ID, 'full' , true);
           echo '<p>' . $attachment->post_title . '</p>';
          }
     }

投稿のタイトルは印刷されますが、画像は印刷されません。

編集1:はい私は間違いなくget_postsで投稿を得ています

もう少しデバッグする:

$attachments = get_posts( $args );
     if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
           $image= wp_get_attachment_image( $attachment->ID, 'thumbnail' , false, array( 'id' => $attachment->ID ));
           echo $image;
           print_r(wp_get_attachment_image_src( $attachment->ID, 'thumbnail' , false, array( 'id' => $attachment->ID )));
           echo var_export($image);
           echo '<p>' . $attachment->post_title . '</p>';
          }
     }
}

これを返します:

Array ( [0] => http://localhost/multi/wp-content/uploads/2011/11/FabricColllFabrics-150x150.jpg [1] => 100 [2] => 100 [3] => 1 ) 
false
FabricColllFabrics

最初の画像は... wp_get_attachment_image_srcは正しくソースを見つけていますが、wp_get_attachment_imageは明らかにfalseを返していますか?

編集2:そしてPalmが待っていた顔があります

ある時点で私は何かをデバッグしていたに違いありませんし、誰が私が何を理由にしたのか知っています。

function wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false) {
  return false;

wp_get_attachment_imageの最初の部分

これはすべてlocalhostのもので、私はたいていコアをハックしませんが、ある時点で私はおそらく何かをバックトレースしようとしていて自分の後で片付けを忘れていたと思います。叙事詩は失敗します。

1
helgatheviking

解決策:Palmが待っていた顔

ある時点で私は何かをデバッグしていたに違いありませんし、誰が私が何を理由にしたのか知っています。

function wp_get_attachment_image_src($attachment_id, $size='thumbnail', $icon = false) {
  return false;

wp_get_attachment_imageの最初の部分

これはすべてlocalhostのもので、私はたいていコアをハックしませんが、ある時点で私はおそらく何かをバックトレースしようとしていて自分の後で片付けを忘れていたと思います。叙事詩は失敗します。

0
helgatheviking

明らかに$attachments = get_posts()のデータが返されています。そうでなければ、$attachment->post_titleを出力することはできません。ですので、問題あなたのwp_get_attachment_image()呼び出しに伴うべきです。

最初に確認することは、$iconパラメーターをtrueに設定するのはなぜですか。このパラメータは、実際の添付画像の代わりに、MIMEタイプのアイコンを出力することを目的としています。これをfalseに設定してみてください(またはfalseがデフォルトなので、パラメーターを完全に省略してください)。

それ以外では、これはロングショットですが、fullを省略して、wp_get_attachment_image()にデフォルトの画像サイズthumbnailを出力させます。

2
Chip Bennett

問題のデバッグ

var_export()の結果$image = wp_get_attachment_image( $attachment->ID, 'full' , true);を取得してstring(0)を取得した場合は、画像が受信されなかったため、単にスキップします。

より深いデバッグ:

4番目の引数を配列としてwp_get_attachment_image()に追加するだけです:array( 'id' => $attachment->ID );そして、functions.phpファイルで次のことを試してください。

function debug_img_atts( $attr, $attachment )
{
    echo '<pre>';
    var_dump( $attr );
    var_dump( $attachment );
    echo '<pre>';
}
add_filter( 'wp_get_attachment_image_attributes', 'debug_img_atts', 20, 2 );

そしてあなたのIDがあなたの添付ファイルからのものであるかどうかを確認してください。

別の問題はあなたの画像サイズが登録されていないことです。デフォルトの画像サイズは「サムネイル」です。 3番目の引数を空のままにしてから、functions.phpにadd_theme_support( 'post-thumbnails' );を使用して、出力が得られるかどうかを確認してください。

var_dump( wp_get_attachment_image_src( $attachment->ID ) );を使うこともできます

最後の解決策は、post_mime_typeパラメータを省略し、実際の添付ファイルがどのMIMEタイプであるかを確認してからクエリに戻すことです。調べるには var_dump( get_post_mime_type( $attachment->ID ) ); を使ってください

1
kaiser