J'essaie de créer un menu qui renseigne automatiquement à partir d'un type de publication personnalisé que j'ai et j'ai quelques difficultés à bien faire les choses. Si quelqu'un pouvait m'orienter dans la bonne direction, je l'apprécierais grandement. Voici le code. Le PHP dans le <img src>
extrait les informations correctes et le colle au bon endroit, the_permalink
récupère l'URL correcte, mais place ensuite l'URL au-dessus de la balise <li>
au lieu de l'href.
<ul class="product-menu">
<?php
$products = new WP_Query(
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
)
);
while ( $products->have_posts() ) {
$products->the_post();
$post_thumbnail_id = get_post_thumbnail_id();
$post_thumbnail_url = wp_get_attachment_url( $post_thumbnail_id );
echo
'<li>
<a href="' . the_permalink() . '">
<img src="' . $post_thumbnail_url . '" alt="' . get_the_title() . '">
</a>
</li>';
}
/* Restore original Post Data */
wp_reset_postdata();?>
</ul>
the_permalink()
imprime url immédiatement et ne renvoie rien. Vous devez utiliser la fonction get_the_permalink()
, qui renvoie url de la publication actuelle.
Vous utilisiez the_permalink qui fait écho, vous avez donc fait écho. Vous souhaitez poursuivre get_the_permalink pour renvoyer l'URL, qui peut ensuite être répercutée dans le code. La plupart des fonctions wordpress commençant par the_ se répercutent directement sur la page, celles avec get_ renvoient le résultat.
Cela devrait fonctionner pour vous. J'ai également utilisé the_post_thumbnail pour faire apparaître une vignette au format wordpress et mettre à jour le problème avec le lien hypertexte.
<ul class="product-menu">
<?php
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
)
$products = new WP_Query($args);
while ( $products->have_posts() ) {
$products->the_post();
echo '<li><a href="' . get_the_permalink() . '">';
// check if the post has a Post Thumbnail assigned to it.
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
echo '</a></li>';
}
/* Restore original Post Data */
wp_reset_postdata();
?>
</ul>