Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Filtrer correctement le contenu des publications (et comprendre apply_filters)

38

De temps en temps, chaque fois que je travaille avec du code source préexistant ou que j’effectue un audit de code, je vois d’autres personnes modifier le contenu de la publication d’un objet de publication comme celui -ci :

<?php

$post->post_content = $my_content;

À ce stade, certains viendront et diront immédiatement que vous vous trompez. Je déteste cette phrase (et elle est même jonchée dans la base de code WordPress, mais je m’éloigne du sujet).

Il existe des moyens d’utiliser d’autres fonctions API WordPress existantes pour nettoyer les données avant de les définir égales à la valeur de l’ attribut post_content, l’utilisation de ces fonctions n’est pas la meilleure façon de procéder.

Au lieu de cela, nous devrions tous utiliser apply_filters. Le problème? Certains ne savent pas, certains ne savent pas comment cela fonctionne, et certains ne savent pas comment l’utiliser. C’est-à-dire qu’il n’est pas clair comment filtrer correctement le contenu des publications.

Contenu brut filtré par WordPress puis écrit dans la base de données.

Mais pour ceux qui peuvent appartenir à l’une des catégories ci-dessus, cela peut peut-être aider.

Filtrer correctement le contenu des publications

À ce stade, je suppose que vous connaissez WP_Post, ses propriétés et comment les modifier via diverses fonctions API.

Le principal problème dont je parle est de s’assurer que le contenu qui sera écrit dans la base de données est formaté de la même manière que WordPress le ferait si vous deviez écrire ou mettre à jour un article.

Et la façon dont cela se passe est la suivante (et nous verrons bientôt les détails à ce sujet):

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Mais les questions de savoir ce que fait cette fonction, comment elle fonctionne et quand l’utiliser demeurent.

Qu’est-ce que apply_filters ?

Bien sûr, vous pouvez tout lire à ce sujet dans les ressources pour développeurs, et cela donne cette définition :

Appelez les fonctions ajoutées à un hook de filtre.

Mais cela n’aide pas toujours. Je veux dire que nous pouvons lire la documentation et repartir confus, n’est-ce pas ?

Pensez-y de cette façon:

  1. Un filtre est une fonction qui accepte les entrées à traiter.
  2. L’entrée est traitée en fonction de la définition de la fonction.
  3. La fonction renvoie alors la valeur traitée.

Ce que vous faites avec la valeur renvoyée dépend de vous, mais lorsque vous appliquez un filtre ou appelez apply_filters à une information, vous dites à WordPress: «J’ai cette information, veuillez appliquer le filtre identifié par cette clé et remettre le le résultat me revient."

Pas mal, non ?

Comment ça marche?

Mais il y a une partie de ce qui précède qui mène à une question. Concrètement, je précise que «…veuillez appliquer le filtre identifié par cette clé…» et l’idée de clé peut prêter à confusion d’autant plus qu’un filtre ou une action ou plus généralement un hook peut être identifié par ce qu’on appelle un tag ou un clé.

Ce sont des synonymes. Ainsi, lorsque vous voyez une balise ou une clé dans le contexte d’un crochet, traitez-les comme telles.

Cela dit, voici comment cela fonctionne :

  1. La fonction apply_filters accepte deux arguments. La première est la balise ou la clé (selon comment vous voulez l’appeler) associée au filtre (lire: fonction) que vous souhaitez utiliser pour traiter le travail, la seconde est la valeur que vous souhaitez traiter au sein de ladite fonction.
  2. Le filtre se déclenchera et renverra un résultat (ou, rappelez-vous, la fonction que nous avons définie).
  3. Nous prenons ensuite la valeur renvoyée et l’appliquons à la propriété de notre choix.

Ainsi, par exemple, vous êtes susceptible de voir quelque chose comme ça dans la base de code de quelqu’un d’autre (ou peut-être même la vôtre) :

<?php

$post->post_content = apply_filters( 'the_content', $my_content );

Et maintenant que vous avez un peu de contexte sur la façon dont cela fonctionne, vous avez l’idée, n’est-ce pas ?

Comment l’utilisons-nous ?

Cela ramène la boucle de la publication à la question initiale de savoir comment nous pouvons utiliser apply_filters pour post_content chaque fois que nous devons insérer ou mettre à jour une publication.

Disons donc que vous avez le contenu que vous souhaitez appliquer (ou ajouter) à la valeur du contenu d’un article. Vous pourriez faire quelque chose comme ça :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = $new_content;

Mais c’est une mauvaise forme. Au lieu de cela, vous faites ceci :

<?php

/**
 * Assume $contents is an array of information we want to convert into content for a post.
 */

$new_content = '';
foreach ($contents as $line) {

    if (false === strpos( $line, $name)) {
        $new_content .= $line;
    }
}

$post->post_content = apply_filters( 'the_content', $new_content );

Et c’est comme ça que WordPress le fait.

Conclusion

Donc, compte tenu de toutes les informations et du code ci-dessus, vous devez être bien armé non seulement pour vous assurer que vous filtrez correctement les données qui seront insérées dans la base de données, vous avez les connaissances nécessaires pour définir vos filtres et les appliquer à toutes les données que vous jugez appropriées.

Mais des exemples pour cela sont le contenu d’un autre article.

En attendant, si vous travaillez avec du contenu de publication, assurez-vous de filtrer correctement les données avant de les déposer dans la base de données.

Source d’enregistrement: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More