web-dev-qa-db-fra.com

Quelle est la bonne façon d'obtenir le contenu d'une page?

L'objectif est très simple: imprimer le contenu d'une page sur une page. J'ai essayé:

<?php the_content() ?>
<?= get_the_content() ?>

puis

<?php the_content(get_the_ID()) ?>
<?= get_the_content(get_the_ID()) ?>

Aucun d'entre eux a travaillé.

Puis j'ai trouvé cette solution bizarre:

<?= apply_filters('the_content', get_post_field('post_content', get_the_ID() )) ?>

Pourquoi the_content () et get_the_content () n'ont pas fonctionné?

Existe-t-il une solution plus propre pour afficher le contenu de la page, puis le dernier?

1
Boykodev

Quelques notes avant de commencer

  • JAMAIS JAMAIS utiliser des codes courts php, ils sont mauvais, déroutants et ne sont pas supportés par défaut sur certains serveurs. À mon humble avis, ils n'auraient jamais dû entrer dans PHP en premier lieu. Les normes WordPress ( qui ne veulent pas dire grand chose ) interdisent également l’utilisation de balises. Utilisez les balises php appropriées et oubliez que les balises courtes existent même

  • the_content() et get_the_content() n'accepte pas l'ID de publication, le premier paramètre de ces deux balises de modèle sont $more_link_text

  • get_the_content() ainsi que le contenu extrait du champ post_content sont des contenus non filtrés, les filtres the_content sont un ensemble de filtres appliqués à ce contenu non filtré et incluent des filtres tels que wpautop qui appliquent des balises p à the_content().

La croyance populaire est que the_content() et get_the_content()DOIVENT être utilisés à l'intérieur de la boucle. Ce n'est pas tout à fait vrai, bien qu'il ne soit vraiment pas recommandé de l'utiliser en dehors de la boucle. Tout comme get_the_ID() , get_the_content() s'attend à ce que des données de publication globales soient configurées ($post = get_post()), ainsi s'il y a des données postérieures disponible en dehors de la boucle dans la portée globale, il renverra les données.

Votre problème est assez étrange. Si nous examinons les codes sources ici, get_the_ID() et get_the_content() appellent $post = get_post() et get_post() renvoie $GLOBALS['post'] si aucun ID n'est transmis et si $GLOBALS['post'] sont définis, ce qui semble être le cas ici. get_post_field() renvoie correctement le contenu de la page, ce qui signifie que get_the_ID() renvoie le bon ID de page, ce qui signifie que get_the_content() aurait dû fonctionner et aurait renvoyé le contenu de la page non filtrée (the_content() aurait dû afficher le contenu de la page filtrée )

Quoi qu'il en soit, vous aurez besoin de déboguer ceci pourquoi les choses ne veulent pas fonctionner comme prévu. Pour répondre à votre question concernant l’affichage correct et fiable du contenu de la page sans la boucle, vous pouvez accéder à l’objet interrogé, obtenir la propriété $post_content, lui appliquer les filtres de contenu et l’afficher. Juste une note, cela ne fonctionnera pas si vous utilisez query_posts de quelque manière que ce soit, car il casse l'objet de requête principal qui contient l'objet interrogé. C’est la raison principale pour laquelle il ne faut jamais utiliser query_posts

$current_page = get_queried_object();
$content      = apply_filters( 'the_content', $current_page->post_content );
echo $content;
3
Pieter Goosen

Affiche le contenu de la publication en cours. Cette balise de modèle doit être dans la boucle while.

<?php 
    if ( have_posts() ) {
        while ( have_posts() ) {
            the_post();
            the_content(); 
        } // end while
    } // end if
?>

Plus: the_content () - Codex WordPress

2
Daniel Noaein