Je ne sais pas comment utiliser ce filtre . Quelqu'un pourrait-il me montrer un exemple? J'essaie de changer ('0', '1', '%')
en ('0 Comments', '1 Comment', '% Comments')
.
J'utilise cette fonction pour obtenir le nombre de commentaires.
function lpe_get_comments_number( $anchor='#comments' ) {
$return = '<a class="comments-number-link" href="' . get_permalink() . $anchor . '">';
$return .= get_comments_number(); // '0', '1', '%'
$return .= '</a>';
return $return;
}
Je sais que je pourrais simplement définir les arguments ici et l'appeler un jour, mais j'espérais stocker mes fonctions personnalisées dans un fichier différent et gérer leurs paramètres à partir du thème functions.php.
Le filtre que vous mentionnez est utilisé à la fin de get_comments_number_text
. Comme vous pouvez le constater à partir de la source, le nombre de commentaires passés par le filtre vous permet de modifier complètement le texte par défaut. Comme ça:
add_filter ('comments_number', 'wpse89257_comments_number', 10, 2);
function wpse89257_comments_number ($output, $number) {
if ($number == 0) $output = '0 Comments';
elseif ($number == 1) $output = '1 Comment';
else $output = $number . ' Comments';
return $output;
}
Si vous mettez des fonctions telles que get_permalink()
ou get_comments_number()
dans une fonction, vous devez rendre les vars $comments
et $post
accessibles. En savoir plus sur la portée en PHP .
Normalement, vous le ferez avec un mot clé global
. Un exemple simple: retrouver le permalien
function my_personal_permalink( $anchor = '' ) {
global $post;
$return = get_permalink( $post->ID );
$return .= $anchor;
return $return;
}
Ceci est un exemple très simple . get_permalink()
besoin de quelques informations à partir desquelles il devrait générer le permalien. Nous devons donc rendre le "post" accessible dans la fonction. Ceci sera fait avec global $post;
, cela rendra les données de publication réelles accessibles. get_permalink()
besoin de l'ID de poste, nous le transmettons avec $post->ID
Si vous utilisez des fonctions de modèle dans une fonction, vous devez alors explorer les données dont les fonctions de modèle ont besoin (publication, commentaire, connexion à la base de données ($wpdb
), etc.) et les transmettre en tant qu'argument.
De votre commentaire sur ma première réponse, je pense que vous souhaitez appliquer des filtres.
function lpe_get_comments_number( $anchor='#comments' ) {
$return = '<a class="comments-number-link" href="' . get_permalink() . $anchor . '">';
$args = array(
'zero' => 'Zero comments',
'one' => 'One comment',
'more' => '% Comments'
);
$filtered_args = apply_filters( 'choose_your_hook_name', $args );
// be sure all keys in the filtered args are present and have a valid value
// this is optional but usefull
$args = wp_parse_args( $filtered_args, $args );
$return .= get_comments_number( $args['zero'], $args['one'], $args['more'] ); // '0', '1', '%'
$return .= '</a>';
return $return;
}
add_filter( 'choose_your_hook_name', 'your_filter_callback', 1, 1 );
function your_filter_callback( $args ) {
return array( 'zero' => 'Foo Comments', 'one' => 'Bar Comments' );
}
Vous pouvez également passer un argument supplémentaire à apply_filters()
si vous souhaitez décider en fonction des arguments transmis:
$zero = 'Zero Comments';
if ( $today == 'sunday' ) {
$foo = 'Sunday, yeah!';
} else {
$foo = '';
$bar = 'No sunday';
}
$zero = apply_filters( 'choose_your_hook_name', $zero, $foo, $bar );
get_comments_number( $zero, $one, $more );
[plus de code]
add_filter( 'choose_your_hook_name', 'your_filter_callback', 1, 3 );
function your_filter_callback( $zero, $foo = '', $bar = '' ) {
if ( ! empty( $foo ) )
$zero = 'No comments on sunday!';
elseif( ! empty( $bar ) )
$zero = $bar . ', here are % comments';
return $zero;
}