web-dev-qa-db-fra.com

Afficher le contenu du modèle de page (get_page)

Mon problème est que j'ai affiché le contenu de 3 pages sur index.php en utilisant get_page (). Le problème est que chacune de ces pages a son propre modèle de page

/*
Template Name: another page template
*/

qui contient la boucle avec 3 messages dans la catégorie.

De cette façon, je ne peux voir que le contenu de la page tapée dans l'éditeur WP, mais aucune trace d'articles postés sur des pages.

Comment afficher trois articles du modèle de page sur index.php?

Pour afficher des pages sur index.php, j'utilise:

<?php
 $id = 1;
 $post = get_page($id);
 $content = apply_filters('the_content', $post->post_content);
 echo $content;
?>

et les pages ont leur propre template avec the_loop:

<?php query_posts( array( 'category_name' => 'name', 'posts_per_page' => 3 ));
  while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
1
cachaito

Vous semblez confondre l'objet database qui est une publication/page et le résultat rendu qui est une publication/page. Les données contenues dans les tables wp_posts et wp_post_meta définissent la publication object. Un fichier template définit la sortie rendue lorsqu'un objet database donné est interrogé.

Il existe trois types de requêtes: les requêtes default, main pour un contexte donné, les requêtes secondary définies par le cœur (comme le menu Navigation) et les requêtes custom définies ailleurs. (soit par le thème ou par un plugin).

La requête default, main pour un contexte donné n'est jamais affectée par les requêtes personnalisées, même si elle peut être modifiée, en filtrant pre_get_posts ou en la masquant avec query_posts().

Lorsque vous appelez get_page(), il se produit que WordPress interroge la publication object associée à un ID donné, et non le fichier template utilisé pour restituer cet objet dans son contexte normal.

Longue histoire, courte: si vous voulez exécuter dans un autre contexte les mêmes requêtes personnalisées dans chacun de vos trois modèles de page personnalisés, vous devez exécuter le même code que celui que vous utilisez sur ces trois modèles de page personnalisés.

(En outre: veuillez indiquer que vous n'avez pas modifié le fichier index.php de votre thème à cette fin. Ainsi, vous casserez complètement la hiérarchie des modèles pour votre thème.)

La solution la plus propre serait de scinder le code de requête personnalisé en fichiers template-part, un pour chaque modèle de page personnalisé; peut-être:

  • loop-three-latest-category-x.php
  • loop-three-latest-category-y.php
  • loop-three-latest-category-z.php

Ainsi, un de vos modèles de page personnalisés ressemblera à ceci:

/**
 * Template Name: another page template
 * 
 * Category X custom page template
 * 
 * Used to display the three latest posts in 
 * category x.
 */

get_header();

get_template_part( 'loop-three-latest-category-x' );

get_footer();

Ensuite, pour sortir les trois requêtes personnalisées sur la page d'accueil du site, créez un fichier de modèle appelé front-page.php et appelez les trois fichiers de modèle en haut:

<?php
/**
 * Front-page template
 * 
 * Used to render the site front page
 */

get_header();

get_template_part( 'loop-three-latest-category-x' );
get_template_part( 'loop-three-latest-category-y' );
get_template_part( 'loop-three-latest-category-z' );

get_footer();
2
Chip Bennett