web-dev-qa-db-fra.com

Supprimez les Ellipsis de l'extrait récupéré à l'aide de get_the_excerpt ()

J'utilise un WP_query personnalisé pour afficher un carrousel avec le message le plus récent sur une page qui n'a pas de boucle principale. Dans la boucle WP_query, j'utilise get_the_excerpt() pour récupérer l'extrait généré automatiquement de ces publications. Les articles n'ont pas d'extrait personnalisé, pas plus qu'ils n'ont de balise <!--more-->. Cependant, ces extraits générés contiennent un Ellipsis final (...) (pas un Ellipsis réel, mais trois points) à la fin.

Selon tous les messages et le codex, je devrais être en mesure de modifier ou de supprimer les points finaux en ajoutant un filtre au crochet excerpt_more. J'ai ajouté ce code à mon functions.php:

add_filter('excerpt_more', 'change_excerpt_more', 1);
function change_excerpt_more($more){
  return '';
}

Mais ça ne fait rien. J'ai essayé diverses variantes de ceci (renvoyer une chaîne de test, ne pas accepter d'argument par la fonction, changer la priorité de l'appel add_filter), mais les extraits générés ne changent pas du tout.

Est-ce que je fais quelque chose de mal? Le filtre ne fonctionne-t-il pas avec un WP_query personnalisé? Comment puis-je réparer cela?

Merci!

2
MoritzLost

Le troisième champ de add_filter() est prioritaire. La priorité par défaut de WP _ est de 10. Vous pouvez tout à fait omettre le 1 ou bien déclarer le nombre d'arguments acceptant par fonction en le passant comme 4ème champ. add_filter('excerpt_more', 'change_excerpt_more', 10, 1);

OU par défaut: add_filter('excerpt_more', 'change_excerpt_more');


re: questions dans les commentaires

se demande toujours pourquoi cela ne fonctionnerait pas sans avoir passé une priorité si

vous passiez une priorité

Le problème que vous rencontriez est que vous étiez passez une priorité, (1), et qu’elle était peut-être inférieure à certaines autres choses utilisant ce hook. Donc, il fonctionne peut-être bien, mais il est juste en train d'être écrasé après son exécution.

Les méthodes add_filter et add_action se composent de quatre parties:

  1. le filtre ou l'action, défini par apply_filters('name'... et do_action('name'..., respectivement.
  2. la fonction de rappel à appliquer, votre change_excerpt_more()
  3. la priorité, une valeur entière dont la valeur par défaut est 10
  4. le nombre d'arguments attendus par le rappel (mis à disposition par le do_action et le apply_filter)

Ainsi, dans l'exemple de votre question, vous avez passé 1 en priorité, car il se trouve dans le troisième champ. En supposant que vous vouliez définir le seul argument ($more), vous devez explicitement passer une priorité ou un champ vide (wordpress utiliserait la priorité par défaut).

votre code:

Ce:

add_filter('excerpt_more', 'change_excerpt_more', 1);

Est le même que:

add_filter('excerpt_more', 'change_excerpt_more', 1, 1);


définir l'argument unique

Ainsi:

add_filter('excerpt_more', 'change_excerpt_more', , 1);

C'est la même chose que:

add_filter('excerpt_more', 'change_excerpt_more', 10, 1);

Et comme excerpt more n'a qu'un seul argument à transmettre, il s'agit également de: add_filter('excerpt_more', 'change_excerpt_more');


En priorité

La priorité devient la clé numérique dans un tableau de filtres/actions appliqués au point d'ancrage. Triés par ces index numériques, ils sont exécutés dans cet ordre. Comme il ne s'agit que d'un (int) utilisé comme index, la seule limitation est PHP_INT_MAX. La valeur par défaut de Wordpress est 10, permettant ainsi aux hooks de s'exécuter facilement avant ou après. Avec rien d'autre n'utilisant le point d'ancrage, une priorité par défaut sera exécutée après toute utilisation principale puisqu'elle a été ajoutée au point d'ancrage après. Pour être sûr que vous utilisez votre hook après avoir ajouté quoi que ce soit par défaut, vous pouvez passer une priorité plus élevée.

Mais encore une fois, votre problème était que votre priorité était trop élevée (1) car cette valeur se trouvait dans le troisième emplacement du add_filter. Donc, il était en cours d'exécution, et ensuite tout ce qui était accroché par défaut (pourrait être un thème, un autre plugin, même le noyau) s'exécutait après.

Pour savoir tout ce qui est accroché avec sa priorité, vous pouvez print_r()$wp_filter lui passer le nom du hook en tant que clé du tableau.

function filter_print() {
    global $wp_filter;
    print_r( $wp_filter['excerpt_more'] );
    die();
}
add_action( 'shutdown', 'filter_print' );

[code de Howdy_McGee on cette réponse WPSE]

2
hwl