web-dev-qa-db-fra.com

Modifier le lien 'Lire la suite' en ajoutant une nouvelle classe

Je souhaite ajouter une classe au lien "Lire la suite". En fait, j'ai ceci:

<?php the_content( 'Read more...' ); ?>

Quelles sorties:

<a href="...?p=14#more-14" class="more-link">Read more…</a>

Comment puis-je ajouter une classe (en utilisant PHP) au lien, de sorte qu'il génère:

<a href="...?p=14#more-14" class="more-link my_new_class">Read more…</a>
4
Alvaro

Qu'est-ce qui se passe (exactement)

Lorsque vous appelez the_content() dans votre modèle, vous pouvez l’appeler sans aucun paramètre. Cela signifie que la fonction a déjà les valeurs par défaut de null pour les deux arguments: le texte du lien "plus" et le commutateur booléen qui vous permet de supprimer le contenu du teaser avant le texte du lien "plus".

La fonction the_content() appelle get_the_content() en interne (et transmet les arguments). Il exécute ensuite toutes les fonctions de rappel attachées au filtre the_content-. Donc fondamentalement rien qui est lié au lien ou à autre chose (à part le filtre) se passe dans the_content() - cela se passe dans get_the_content() .

Et là nous avons le filtre the_content_more_link-.

Le filtre en noyau

apply_filters( 
    'the_content_more_link',
    ' <a href="' . get_permalink() . "#more-{$post->ID}\" class=\"more-link\">$more_link_text</a>",
    $more_link_text
);

Filtres en action

Les deux arguments après le nom du filtre (1st arg), sont les arguments accessibles dans les fonctions de rappel attachées.

// Example: Somewhere in core, a plugin or a theme
$output = apply_filters( 'some_filter', $arg_one, $arg_two );

// Example: Somewhere in a custom plugin
// Attach the filter: Attach filter name, callback function name, priority, number of taken args
add_filter( 'some_filter', 'wpse63748_callback_function', 10, 2 );
function wpse63748_callback_function( $arg_one, $arg_two )
{
    // Do something with Arg One = modify the output
    // You have Arg two to help you

    // Always return the first arg for filter callback functions.
    return $arg_one;
}

Modifier le lien "plus"

Maintenant, le plugin réel/réel:

/** Plugin Name: (#63748) Modify the »more«-link. */
add_action( 'the_content_more_link', 'wpse63748_add_morelink_class', 10, 2 );
function wpse63748_add_morelink_class( $link, $text )
{
    return str_replace(
        'more-link',
        'more-link CUSTOM_CLASSES_HERE',
        $link
    );
}

Ajoutez simplement vos classes dans lesquelles vous lisez CUSTOM_CLASSES_HERE, puis transférez-les dans votre répertoire de plugins ou supprimez le commentaire Plugin Name: ... et utilisez-le dans votre fichier themes.php de themes.

11
kaiser

Vous pouvez aussi simplement ajouter un filtre au lien "plus ..." d'origine, ajoutez simplement ce code à votre fichier function.php:

function yourtheme_content_more() {
   $link = get_permalink('');
   $new_link = '<span class="see_more"><a class="button" href="' . esc_url($link) . '">See more from this...</a></span>';

   return $new_link;
}
add_filter('the_content_more_link', 'yourtheme_content_more');
1
Sarderon

Vous pouvez remplacer complètement le lien more en utilisant le filtre the_content_more_link, ajoutez simplement votre classe ici, voir "custom-class" dans le code ci-dessous:

function new_content_more($more) {
       global $post;
       return ' <a href="' . get_permalink() . "#more-{$post->ID}\" class=\"more-link custom-class\">Read More...</a>";
}   
add_filter( 'the_content_more_link', 'new_content_more' );
1
jb510