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?
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;
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
?>