web-dev-qa-db-fra.com

comportement the_content () sur attachment.php versus single.php

J'ai un peu de mal à obtenir the_content() pour travailler sur attachment.php. J'ai une page de modèle qui a la boucle de base et des appels simples the_content() dans la boucle pour afficher le post.

Scénario 1

Chargez une page de pièce jointe avec le fichier modèle single.php. La balise image sera ensuite générée et exécutée à travers prepend_attachment.

Scénario 2

Chargez une page de pièce jointe avec le fichier modèle attachment.php et il ne restituera rien à partir de the_content(). J'ai également vérifié qu'il n'appelait pas les filtres prepend_attachment ni the_content.

Quelqu'un peut-il expliquer ce qui se passe ici?

<?php
if (have_posts()) : while (have_posts()) : the_post();
  the_content();
endwhile; endif;
?>
2
funwhilelost

C'est un comportement correct, si votre pièce jointe n'a réellement rien dans le champ post_content (ce qui est assez courant).

Lorsque les modèles post-centriques sont exécutés, prepend_attachment() est utilisé comme filtre pour "émuler" le contenu de publication. Ce n'est pas le cas avec le modèle "destiné" pour les pièces jointes.

Si vous regardez template-loader.php:

elseif ( is_attachment()     && $template = get_attachment_template()     ) :
    remove_filter('the_content', 'prepend_attachment');

le filtre est explicitement supprimé.

Il n'y a donc pas de "faux" contenu généré pour vous. Vous devrez décider et exprimer dans le code ce que vous voulez réellement afficher pour les pièces jointes, ou rajouter simplement le filtre si que est ce que vous voulez.

3
Rarst