web-dev-qa-db-fra.com

Personnaliser la sortie par défaut de la galerie Wordpress

Je souhaite personnaliser la galerie par défaut de Wordpress afin qu’elle se présente sous la forme suivante pour chaque élément:

<dl class="gallery-item imgteaser">
  <a rel="lightbox-cats" href="http://mydomain.com/link/to/image.jpg" title="Image caption (if any)" name="image.jpg (image file name)">
    <img width="150" height="150" src="http://mydomain.com/link/to/image-150x150.jpg" class="attachment-thumbnail" alt="002" title="002">
  </a>
</dl>

En gros, je veux que le lien (<a>) ait:

  • rel pour activer le script lightbox (défini comme "lightbox-cats" par l'utilisateur manuellement dans chaque galerie)
  • href qui mène à l'URL directe de l'image (par exemple: http: // mydomain.com/link/to/image.jpg)
  • title c'est pour la légende d'image Wordpress
  • name qui est le nom du fichier image (par exemple: image.jpg)

J'ai essayé de créer le formatage en modifiant des extraits extraits de [ici] et [ici] , mais cela devient très compliqué parce que je ne sais pas comment supprimer les éléments inutiles.

Par exemple, je n'ai pas besoin du <a> pour créer un lien vers la page de pièce jointe (quelque chose comme http: // mydomain.com/?attachment=20). Je n'ai besoin que de lierdirectementà l'URL de l'image.

En utilisant le filtre et en l’ajoutant à functions.php, voici ce que j’ai fait jusqu’à présent (c’est très compliqué): http: // Pastebin.com/Q51W1BVr

Je l'ai mis dans Pastebin parce que c'est un peu trop long (je suis désolé, je ne peux pas en faire un lien parce que je n'ai pas assez de point de réputation ici: /)

Bien que je crois que les parties qui modifient la sortie ne sont que d’ici:

$i = 0; // Modified output from here
foreach ( $attachments as $id => $attachment ) {

    $link = wp_get_attachment_link($id, $size, true, false);
    if( ! empty($rel) ) { !!! // Add rel injection
        $link = str_replace('<a href=', "<a rel='$rel' href=" .wp_get_attachment_url( $attachment->ID ). " alt=", $link);
    } else {
        $link = str_replace('<a href=', "<a rel='$rel' href=", $link);
    }

    $link = str_replace("title='", "title='" . wptexturize($attachment->post_excerpt) . "' name='", $link);

    $output .= "<{$itemtag} class='gallery-item imgteaser'>
    ";
    $output .= $link;
    $output .= "</{$itemtag}>
    ";

    if ( $columns > 0 && ++$i % $columns == 0 )
        $output .= '<br style="clear: both" />';
}

$output .= "
        <br style='clear: both;' />
    </div>\n";

return $output;
}

Voici comment désordonné le résultat est:

<dl class="gallery-item imgteaser">
    <a rel="lightbox-cats" href="http://localhost/test/wp-content/uploads/2012/09/002.jpg" alt="http://localhost/test/?attachment_id=36" title="" name="002">
    <img width="150" height="150" src="http://localhost/test/wp-content/uploads/2012/09/002-150x150.jpg" class="attachment-thumbnail" alt="002" title="002"
    </a>
</dl>

Cela fonctionne, mais il a le alt="http://localhost/test/?attachment_id=36" inutile car je ne sais pas le supprimer. Et je sens que mon code est vraiment peu efficace/malpropre. : /

1
deathlock

Comme toujours avec WordPress, il existe un filtre pour le faire, sans avoir besoin d'une expression régulière, qui peut échouer si quelque chose change.

Voici le code pour la sortie:

<?php
add_filter('wp_get_attachment_image_attributes', function($attr, $attachment){
    unset($attr['alt']); // Just deleting the alt attr
    return $attr;
}, 10, 2);

$url = wp_get_attachment_url( $attachment->ID );
$name = esc_attr( $attachment->post_title );
$title = wptexturize($attachment->post_excerpt);

$text = wp_get_attachment_image( $id, $size, false );
if ( trim( $text ) == '' )
    $text = $attachment->post_title;


$link = "<a href='$url'" . (!empty($rel)? " rel='$rel'":"") . " title='$title' name='$name'>$text</a>";

C'est plus rapide parce que vous gagnez du temps car vous avez déjà l'objet $attachment et que wp_get_attachment_link le récupère à nouveau, même s'il est mis en cache dans la mémoire, il est préférable de ne pas le faire.

Remplacez le code, par celui ci-dessus, et n'oubliez pas de placer le add_filter avant la boucle, de sorte que vous aurez le temps de créer plusieurs fois le même filtre.

$link = wp_get_attachment_link($id, $size, true, false);
if( ! empty($rel) ) { // !!! Add rel injection
    $link = str_replace('<a href=', "<a rel='$rel' href=" .wp_get_attachment_url( $attachment->ID ). " alt=", $link);
} else {
    $link = str_replace('<a href=', "<a rel='$rel' href=", $link);
}

$link = str_replace("title='", "title='" . wptexturize($attachment->post_excerpt) . "' name='", $link);
2
Webord

Il existe un plugin simple parfait pour changer le thème de la galerie wordpress: https://wordpress.org/plugins/gallery-theme/ En utilisant ce plugin, vous pouvez également avoir différents thèmes pour différentes galeries!

0
Michael