Je souhaite afficher posts
et attachments
dans les résultats de la recherche. Fondamentalement, j'ai besoin de quelque chose qui dit if
le message a une vignette, montrez-le. else
affiche l'image de la pièce jointe (car ils ne possèdent pas de vignettes et sont extraits directement de la bibliothèque multimédia).
C'est ce que j'ai essayé sursearch.php
, mais cela n'a pas fonctionné:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php
echo '<a class="search-item">';
if( has_post_thumbnail() ) {
$image_src = the_post_thumbnail( 'custom-size', array( 'class' => "img-style" ) );
}
else {
$image_src = wp_get_attachment_image_src( 'custom-size', array( 'class' => "img-style" ) );
echo '</a>';
}
?>
<?php endwhile; ?>
<?php endif; ?>
La fonction wp_get_attachment_image_src()
s'attend à ce que vous transmettiez également une sorte d'ID de pièce jointe. Elle ne récupère pas l'image HTML dont nous avons besoin. Nous devrions plutôt utiliser wp_get_attachment_image()
.
SI une publication a une miniature de publication, saisissez-la.
SINON SI le message a des images jointes, prenez la première.
ELSE peut-être afficher un espace réservé? J'ai défini le cas else en haut de la boucle par défaut.
if( have_posts() ) {
while( have_posts() ) {
the_post();
$image_html = ''; // assign placeholder url here?
if( has_post_thumbnail() ) {
$image_html = get_the_post_thumbnail( $post->ID, 'custom-size', array( 'class' => 'img-style' ) );
} else { // We don't have a thumbnail - grab attachments
$media = get_posts( array(
'post_type' => 'attachment',
'posts_per_page' => 1,
'post_status' => 'any',
'post_parent' => $post->ID
'post_mime_type' => array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' );
) );
if( ! empty( $media ) ) {
$image_html = wp_get_attachment_image( $media[0]->ID, 'cusotm-size', false, array( 'class' => 'img-style' ) );
}
}
if( ! empty( $image_html ) ) {
echo '<a href="'. get_permalink() . '">' . $image_html . '</a>';
}
}
}
Remarque, je n'ai pas testé ce qui précède, alors n'hésitez pas à l'affiner.