私はmysqlを起動し、このクエリが結果を返すことを確認しました:
mysql> SELECT * FROM wp_posts WHERE post_parent = 68 AND post_type = 'attachment' AND post_name = 'side-logo-auto2' LIMIT 1;
1 row in set (0.00 sec)
私のテンプレートでも、同じことを試みます。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post();
//$wpdb->posts is wp_posts table
//$post->ID is current post of post_type page,
//that is associated with page of this template
global $wpdb;
$image = $wpdb->get_var(
$wpdb->prepare(
"SELECT * FROM $wpdb->posts
WHERE post_parent = %d
AND post_type = %s
AND post_name = %s
LIMIT 1
",
$post->ID,
'attachment',
'side-logo-auto2'
)
);
echo "The image id is {$image->ID}";
echo wp_get_attachment_image($image->ID);
endwhile; endif; ?>
$ post-> IDは68を返します。それでも、$ imageに割り当てられた値はレコードではなく、むしろnullです。
$wpdb->get_var
は単一の変数を返しますが、SQLステートメントには複数列の行を返すSELECT *
があります。
SQL文をSELECT ID ...
の代わりにSELECT * ...
に変更する必要があります。