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>
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.
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');
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' );