В ответ на ваше редактирование. Вы хотите убедиться, что вы сбрасываете $ img после каждой итерации цикла while (). Затем вы захотите сделать проверку, чтобы убедиться, что она установлена, прежде чем писать тег изображения. Это остановит повторение той же миниатюры. Пример кода ниже.
Прямо сейчас это повторяется, потому что он находит изображение для первого поста, но не для других. Но $ img установлен в первом посте, поэтому он продолжает использовать его для всех остальных, потому что он никогда не будет сброшен или изменен.
<ul>
<?php query_posts('cat='.get_query_var('cat').'&order=ASC'); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php
//Get images attached to the post
$img = false;
$args = array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => -1,
'order' => 'DESC',
'post_status' => null,
'post_parent' => $post->ID
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $attachment) {
$img = wp_get_attachment_thumb_url( $attachment->ID );
break;
}
}
?>
<li>
<?php if ($img): ?><img src="<?php echo $img; ?>" alt="" /><?php endif; ?>
<h2 class="small"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
</li>
<?php endwhile; ?>
<?php endif;?>
</ul>