web-dev-qa-db-fra.com

Afficher les liens dans des extraits?

J'ai un problème avec the_excerpt et je ne trouve pas la réponse partout ... Je veux simplement permettre aux liens d'être cliquables lorsqu'ils sont affichés via the_excerpt! Il doit y avoir une fonction pour cela, plutôt que de compter sur un plugin. Mais je ne le trouve pas et les plugins d'extraits avancés sont si complexes que je ne parviens pas à trouver le petit extrait qui fait que cela fonctionne.

3
AndrettiMilas

Vous pouvez utiliser le script que j'ai trouvé ici: http://aaronrussell.co.uk/legacy/improving-wordpress-the_excerpt/

Je l'ai modifié pour afficher des liens dans l'extrait et supprimé certaines des autres fonctions:

<?php
function keep_my_links($text) {
  global $post;
if ( '' == $text ) {
    $text = get_the_content('');
    $text = apply_filters('the_content', $text);
    $text = str_replace('\]\]\>', ']]&gt;', $text);
    $text = preg_replace('@<script[^>]*?>.*?</script>@si', '', $text);
    $text = strip_tags($text, '<a>');
  }
  return $text;
}
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'keep_my_links');
?>

La partie qui le corrige est $text = strip_tags($text, '<a>');. avec remove_filter('get_the_excerpt', 'wp_trim_excerpt');

8
Jeremy Jared

Vous pouvez utiliser le plugin suivant pour autoriser les liens et autres balises HTML dans les extraits.

Plugin: Afficher les liens dans des extraits wordpress

Je n'ai aucune affiliation concernant le plugin

1
user3162185

Le code permet essentiellement à une liste de balises HTML séparées par des virgules de fonctionner dans vos extraits qui sont normalement supprimés par WordPress. Testé sur Genesis et fonctionne.

 add_filter( 'get_the_content_limit_allowedtags', 'get_the_content_limit_custom_allowedtags' );

function get_the_content_limit_custom_allowedtags() {
// Add custom tags to this string
return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>'; 
}

Source http://daan.kortenba.ch/add-tags-to-genesis-content-limit-in-content-archives/

1
Brad Dalton

WordPress supprime les balises dans wp_trim_words(), appelé par get_the_excerpt(); nous devons donc filtrer 'wp_trim_words', en copiant cette fonction avec une seule modification: remplacez wp_strip_all_tags() par strip_tags().

Nous ne voulons pas que les autres fonctions qui exécutent wp_trim_words soient modifiées. Nous ajoutons donc notre filtre pendant que get_the_excerpt() est en cours d'exécution et le supprimons lorsque nous avons terminé.

// Allow links in excerpts
function sg_trim_words( $text, $num_words, $more, $original_text ) {
    $text = strip_tags( $original_text, '' );
    // @See wp_trim_words in wp-includes/formatting.php
    if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
        $text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
        preg_match_all( '/./u', $text, $words_array );
        $words_array = array_slice( $words_array[0], 0, $num_words + 1 );
        $sep = '';
    } else {
        $words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
        $sep = ' ';
    }
    if ( count( $words_array ) > $num_words ) {
        array_pop( $words_array );
        $text = implode( $sep, $words_array );
        $text = $text . $more;
    } else {
        $text = implode( $sep, $words_array );
    }
    // Remove self so we don't affect other functions that use wp_trim_words
    remove_filter( 'wp_trim_words', 'sg_trim_words' );
    return $text;
}
// Be sneaky: add our wp_trim_words filter during excerpt_more filter, which is called immediately prior
function sg_add_trim_words_filter( $excerpt_length ) {
    add_filter( 'wp_trim_words', 'sg_trim_words', 10, 4 );
    return $excerpt_length;
}
add_filter( 'excerpt_more', 'sg_add_trim_words_filter', 1 );

J'ai écrit this Gist après avoir examiné d'autres méthodes suggérées, car je pense qu'il s'agit d'une solution plus ciblée. Le Gist sera mis à jour à l'avenir.

0
Greg Perham