WordPress : Affichage des champs/valeurs personnalisés dans le désordre

Publié par Jean-Michel le

J’utilise le plugin Types WordPress pour activer les champs personnalisés. Le plugin vous permet de réorganiser l’ordre des images dans l’éditeur de page d’administration. Voici mon code dans mon single.php pour afficher plusieurs images dans le champ personnalisé et avoir un lien vers lui-même pour également utiliser Fancybox :

<?php
    $mykey_values_img = get_post_custom_values('wpcf-image');
    if ($mykey_values_img != null) {
        foreach ( $mykey_values_img as $key => $value ) {
?>
        <a href="<?php echo $value; ?>" class="fancybox" rel="gallery"><img src="<?php echo $value; ?>" /></a>

<?php
        } //foreach
    } //if
?>

Problème:

À l’heure actuelle, ce code fonctionne parfaitement sur ma copie locale exécutée sur MAMP. Cependant, lorsque je le mets en ligne hébergé sur iPage, les images sont dans le désordre. Je ne sais pas ce qui cause cet écart. Lorsque j’utilise le shortcode de Types pour afficher les images au lieu du php ci-dessus, elles sont dans l’ordre, mais je n’ai pas la possibilité d’utiliser Fancybox. Je me demandais également s’il existait un meilleur moyen d’afficher une image de WordPress qui insérerait la balise alt de l’image.

Solution n°1 trouvée

J’ai trouvé un moyen de le faire fonctionner. Ce n’est pas idéal mais ça marche.

Le plugin Types est venu avec sa propre fonction php pour afficher le champ personnalisé appelé types_render_field. Il a affiché mes images dans l’ordre. Pour faire fonctionner fancybox, j’ai dû faire une sorte de hack sur la chaîne. Voici le code :

$images = ( types_render_field( "image", array( 'size' => 'full', 'alt' => get_the_title(), 'title' => get_the_title() ) ) );
$imgArray = explode(">", $images);

foreach ( $imgArray as $value ) {

    $pos1 = strpos($value, 'src="', 0)+5;
    $pos2 = strpos($value, '" ', $pos1);
    $link = substr($value, $pos1, $pos2 - $pos1);

    echo '<a href="'.$link.'" class="fancybox" rel="gallery">'.$value."></a>";
}

Solution n°2 trouvée

Je viens de rencontrer ce problème aussi, et votre première réponse m’a conduit à une solution plus serrée.

J’ai également utilisé types_render_field(), mais si vous incluez un paramètre ‘raw’, vous pouvez éviter la manipulation de la chaîne.

$images_raw = types_render_field('image', array('raw'=>'true','separator'=>';'));
$images = explode(';', $images_raw);
foreach ($images as $link) {
     echo '<a href="' . $link . '" class="fancybox" rel="gallery">' . $link . '"></a>"';
}

Ensuite, si vous êtes méchant, vous pouvez obtenir l’ID de la pièce jointe à partir de son SRC. En utilisant cet identifiant, vous pouvez obtenir toutes les informations dont vous avez besoin sur cette pièce jointe, comme une légende, etc.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *