web-dev-qa-db-fra.com

apply_filters ('the_content', $ content) vs do_shortcode ($ content)

Disons que j'ai une option de thème ou une zone de texte postmeta personnalisée. Maintenant, je veux exécuter plusieurs shortcodes, textes généraux, images, etc.

Quelle sera la meilleure pratique et pourquoi?

Option 1:

$content = //my text area data;
echo apply_filters('the_content', $content);

Option 2:

$content = //my text area data;
echo do_shortcode($content);

Veuillez m'expliquer quelle sera la meilleure pratique et pourquoi.

MODIFIER

Permettez-moi de décrire le scénario en détail. Je développe des thèmes pour les clients avec leurs exigences. Parfois, il me faut ajouter des méta post sur des types post/pages/post personnalisés, afin qu'ils puissent ajouter des codes abrégés (curseur, formulaire de contact, etc.) ou simplement un texte. C'est un texte déposé.

Pour faire fonctionner le shortcode, j'utilise option 1 . Maintenant, quelqu'un m'a dit que c'était une mauvaise façon de faire et que je devrais utiliser do_shortcode. Mais ils ne m'ont pas expliqué pourquoi c'était mauvais. C'est pourquoi je demande.

L'ensemble de ce processus peut être effectué dans l'éditeur de texte par défaut de wp. Mais je dois créer ces options pour une utilisation spécifique à un modèle, c'est ce que souhaitent mes clients.

18
тнє Sufi

QUESTION ET RÉPONSE REVISITÉES

Il y a parfois des questions qui vous harcèlent et vous traquent plus tard dans la vie, et c'est l'une de ces questions.

Cette question m'a fait penser à une solution alternative au problème. Comme je l'ai déjà indiqué, les champs personnalisés et les boîtes à méta permettent de stocker de petites métadonnées et ne constituent pas une extension pour la publication de contenu permettant l'exécution de codes courts et de fonctions. En outre, comme je l’ai déjà dit, votre méthode est incorrecte et ne doit pas être utilisée

Ce que j'ai trouvé intéressant dans votre message est que vous avez utilisé des champs personnalisés et des méta-boîtes pour afficher par inadvertance un contenu personnalisé à partir d'une entrée utilisateur. Alors je me suis assis et réfléchi à un moyen possible de faire ce travail et d'utiliser correctement les données de champ personnalisé et les données de boîte à méta

C'est mon idée:

LE SCÉNARIO:

_ {NOTE: Ceci peut être modifié pour répondre à tous les besoins} _

Sur un seul message, un utilisateur veut/a besoin d'afficher un contenu personnalisé dynamiquement après le message pour répondre à ses besoins. Cela devrait être dynamique. Le contenu doit être une requête personnalisée et l'utilisateur doit choisir ce qu'il veut afficher quand il veut et ce qu'il veut.

LA SOLUTION POSSIBLE:

Les codes courts ne fonctionneront pas ici, car ils ne peuvent pas être exécutés dans des champs personnalisés. do_shortcode ne fonctionnera pas non plus, car il n'est ni dynamique ni codé en dur, ce que nous ne voulons pas. Comme dans votre question, nous allons utiliser des champs personnalisés. Encore une fois, je souligne, n'utilisez pas le champ personnalisé pour exécuter une requête personnalisée ou des codes courts

LE PLAN:

Nous allons utiliser le champ personnalisé pour only enregistrer nos arguments de requête, c'est tout. Nous créons donc un champ personnalisé appelé custom_query_arguments. Dans votre écran d'édition de publication, vous verrez maintenant votre champ personnalisé, prêt à être utilisé.

La prochaine étape consistera à ajouter nos arguments de requête personnalisés à notre champ. Disons que nous devons afficher 3 messages de catégorie 1 triés par titre. Donc, nos arguments de requête devraient ressembler à ceci: (En format de chaîne)

'posts_per_page=3&cat=1&orderby=title'

C’est ce que vous devez maintenant entrer dans votre champ personnalisé. Une fois entré, sauvegardez la valeur de votre champ personnalisé

Suivant sera de construire la requête personnalisée dans votre single.php. Ce dont nous avons besoin ici, nous devons extraire la valeur de notre champ personnalisé, qui est en fait nos arguments de requête, et l’alimenter dans une nouvelle instance de WP_Query pour extraire les publications. Nous devons également vérifier si une valeur est réellement enregistrée dans ce champ personnalisé. Si le champ personnalisé est vide, rien n'a été montré.

LE CODE:

Vous pouvez essayer quelque chose comme ceci dans single.php juste après le post simple.

$args = get_post_meta( get_queried_object_id(), 'custom_query_arguments', true );
// check if the custom field has a value
if( ! empty( $args ) ) {

    $q = new WP_Query( $args );

    if( $q->have_posts() ) {
        while( $q->have_posts() ) {
            $q->the_post();

            the_title();

        }
        wp_reset_postdata();
    }

} 

Si l'utilisateur souhaite supprimer la requête personnalisée, il peut simplement supprimer la valeur du champ personnalisé et laisser le champ personnalisé vide. S'il doit afficher la même requête mais de la catégorie 10 et un total de 5 publications, il peut simplement remplacer la valeur d'origine par la suivante

'posts_per_page=5&cat=10&orderby=title'

QUELQUES NOTES:

Il est important d’utiliser le bon synatx et le bon format lors de la saisie d’informations dans ces champs et ces méta-boîtes personnalisés. Des erreurs de syntaxe ou des informations incorrectes entraîneront une sortie non désirée, voire des erreurs fatales. Il est important d'informer vos clients de ces informations.

RÉPONSE ORIGINALE

Je ne comprends pas ce que vous essayez d'accomplir, mais d'après ce que je peux vous dire, ce sont deux choses distinctes.

OPTION 1

apply_filters('the_content', $content); est utilisé pour appliquer les filtres de contenu au contenu de publication brute non filtré, qui provient généralement de l'utilisation de $post->post_content. Ces filtres incluent le fameux filtre wp_autop qui ajoute les balises p à the_content()

apply_filters('the_content', $content); est généralement utilisé en conjonction avec get_posts, dans lequel on travaille directement avec les objets WP_Post sans utiliser setup_postdata( $post ), ce qui permet d'utiliser les balises de modèle telles que the_content()

OPTION 2

do_shortcode est utilisé pour ajouter un shortcode n'importe où dans les fichiers de modèle en dehors de l'éditeur de texte dans l'écran de l'éditeur de page, en filtrant les shortcodes par leurs crochets.

L'utilisation correcte est la suivante

Exemple: ajout du shortcode de la galerie dans un fichier de modèle

echo do_shortcode( '[gallery]' )

EDIT 1

D'après vos commentaires, je ne voudrais pas utiliser de shortcode du tout.

Si vous n'allez pas ajouter un shortcode via l'éditeur de texte et si vous voulez l'ajouter directement (hardcode) via do_shortcode dans un fichier de modèle, je préférerais alors simplement ajouter la fonction au modèle.

Exemple:

Si vous avez la fonction shortcode suivante

function footag_func( $atts ) {
    return "foo = {$atts['foo']}";
}
add_shortcode( 'footag', 'footag_func' );

Vous pouvez simplement appeler la fonction directement dans un modèle comme

echo footag_func();

C'est beaucoup plus rapide de cette façon car le shortcode n'a pas besoin d'être analysé

EDIT 2

Pour être honnête ici, vous faites complètement ceci depuis votre montage. C'est pourquoi je ne pouvais pas comprendre votre question initiale

Parfois, il me faut ajouter des méta post sur des types post/pages/post personnalisés, afin qu'ils puissent ajouter des codes abrégés (curseur, formulaire de contact, etc.) ou simplement un texte. C'est un texte déposé.

Pour faire fonctionner le shortcode, j'utilise l'option 1 .....

Les champs personnalisés sont pas sont des champs de texte et ne sont sûrement pas destinés à être utilisés pour exécuter des codes abrégés ni pour cela des curseurs ou des formulaires de contact. Les champs personnalisés ne doivent jamais être utilisés pour remplacer l'éditeur de texte dans les publications et les pages.

Comme je l'ai dit précédemment, apply_filters('the_content', $content); est destiné à appliquer le formatage au contenu de publication brute.

Vous avez deux choix ici

  • Utilisez do_shortcode directement dans les fichiers de modèle, ce que je ne recommanderais pas, car l'utilisation de la fonction est plus rapide car le shortcode n'a pas besoin d'être analysé.

  • Utilisez le shortcode directement dans l'éditeur de texte pour la page/publication particulière

Je vous recommanderais sérieusement de jeter un nouveau regard sur vos structures et sur ce que vous voulez réaliser. Les champs personnalisés ne sont pas des éditeurs de texte et ne peuvent pas exécuter de codes courts ni de curseurs.

Ma recommandation serait de regarder peut-être dans des widgets personnalisés ou un système que vous pouvez utiliser avec des champs personnalisés

16
Pieter Goosen