web-dev-qa-db-fra.com

wp_get_archives: Met les balises span à l'intérieur des ancres

Je sais qu'il est possible d'enrouler du code HTML autour d'éléments d'ancrage avec les arguments intégrés pour wp_get_archives. Existe-t-il un moyen de modifier le contenu des ancres afin d'ajouter une étendue d'habillage au texte d'ancre? L’intention est de l’utiliser pour dresser une liste des archives annuelles d’une catégorie (c’est-à-dire une liste automatisée des années pour lesquelles des postes existent).

Avant:

<ul>
    <li><a href="xx">2014</a></li>
    <li><a href="xx">2015</a></li>
    <li><a href="xx">2016</a></li>
</ul>

Après:

<ul>
    <li><a href="xx"><span>2014</span></a></li>
    <li><a href="xx"><span>2015</span></a></li>
    <li><a href="xx"><span>2016</span></a></li>
</ul>
5
physalis

Étendre les balises d'ancrage

Je pense que vous recherchez les arguments before et after ( PHP 5.4+ ):

wp_get_archives(
    [
        'before' => '<span>',
        'after'  => '</span>'
    ]
);

si vous souhaitez envelopper la balise <span> autour de la balise <a>:

<li><span><a href="xx">Link text</a></span></li>

Étendre à l'intérieur des balises d'ancrage

Si vous le souhaitez dans les balises d'ancrage:

<li><a href="xx"><span>Link text</span></a></li>

vous pourriez alors utiliser le filtre get_archives_link pour reconstruire les liens en fonction de vos besoins.

Modifiez le fichier de thème correspondant avec ( PHP 5.4+ ):

// Add a custom filter
add_filter( 'get_archives_link', 'wpse_get_archives_link', 10, 6 );

// Archive
wp_get_archives(
    [
        'type'   => 'yearly', // For yearly archive
        'format' => 'html'    // This is actually a default setting
    ]
);  // EDIT the arguments to your needs (I'm not showing the <ul> part here)

// Remove the custom filter
remove_filter( 'get_archives_link', 'wpse_get_archives_link', 10, 6 );

où notre rappel de filtre est défini, dans le fichier functions.php du répertoire du thème actuel, en tant que:

function wpse_get_archives_link(  $link_html, $url, $text, $format, $before, $after )
{
    if( 'html' === $format )
         $link_html = "\t<li>$before<a href='$url'><span>$text</span></a>$after</li>\n";

    return $link_html;
}

où nous avons ajouté l'envergure à l'intérieur de la balise d'ancrage.

7
birgire