J'essaie de créer un thème d'une seule page.
Ce qui me pose problème, c’est de comprendre toute cette logique de requête wordpress.
Il y a un objet de requête et soi-disant, j'obtiens tous les posts publiés comme ceci:
$query = new WP_Query( array (
'orderby' => 'menu_order',
'order' => 'ASC',
'post_type' => array( 'page' ),
'post_status' => array( 'publish' ) ) );
et peut les parcourir comme ceci:
while ( $query->have_posts() ) {
$query->the_post();
echo '<li>' . the_title() . '</li>';
}
Mais alors quoi? Je ne peux même pas comprendre ce codex - où sont toutes les fonctions de post objet que je peux utiliser? Vous aimez le_title ()? Où est-ce dans le codex?
Ce que je voulais réaliser semblait assez simple et direct: chargez toutes les pages avec des sous-pages imbriquées, puis imprimez-les simplement sur une seule page de la même manière que la boucle ci-dessus ... Mais ce codex me rend folle: P
Mais est-ce même la meilleure approche? Devrais-je définir ma requête ailleurs (par opposition à index.php comme je le fais maintenant)? Devrais-je utiliser le chargement de page d'origine wordpress qui affiche les pages à l'aide de leurs modèles (s'ils en ont un) ou utiliser quelque chose de similaire à content-page.php comme celui que les thèmes par défaut ont?
Alan
Habituellement, "page unique" fait référence aux sites qui manipulent du contenu via Javascript. Je ne peux pas dire si c'est ce que vous essayez de faire. Si fait, on dirait que ce n’est pas le cas, alors je suppose que ce n’est pas pour le moment.
WordPress remplit la requête pour toutes les pages principales . Cette requête par défaut est généralement appelée "requête principale" et elle est stockée dans une variable global
appelée $wp_query
, que les fonctions Loop supposent, sauf indication contraire. En d'autres termes, cela ...
if (have_posts()) {
while (have_posts()) {
}
}
... est le même que cela ...
if ($wp_query->have_posts()) {
while ($wp_query->have_posts()) {
}
}
En règle générale, vous ne devriez pas non plus créer une nouvelle requête pour ces pages de base. Si vous devez modifier la requête, vous devez le faire via pre_get_posts
.
Les autres fonctions auxquelles vous vous référez - the_title
, etc-- sont "balises de modèle"
Devrais-je utiliser d'une manière ou d'une autre le chargement de page d'origine wordpress qui affiche les pages à l'aide de leurs modèles (s'ils en ont un) ou d'utiliser quelque chose de similaire à content-page.php comme celui des thèmes par défaut?
Probablement oui. Mais encore une fois, je ne suis pas sûr à 100% de ce que vous faites.
Selon
Ce que je voulais réaliser semblait assez simple et direct: chargez toutes les pages avec des sous-pages imbriquées, puis imprimez-les simplement sur une seule page.
Je suppose qu'il essaie de créer un thème à une page, comme http://dev.zeotheory.com/micropage/ . Il serait très utile de savoir à quel point votre thème sera complexe. Fondamentalement, vous pouvez commencer par modifier la requête principale sur votre page d'accueil avec pre_get_posts
et la balise conditionnelle is_home
pour afficher uniquement les pages de niveau supérieur. Cela pourrait être fait en ajoutant ceci à votre functions.php:
function show_all_pages_on_index( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set('post_type', 'page');
$query->set('showposts', '-1');
$query->set('post_parent', '0');
}
}
add_action( 'pre_get_posts', 'show_all_pages_on_index' );