web-dev-qa-db-fra.com

Comment générer une liste de pages enfants et utiliser certains de leurs champs personnalisés?

J'ai une structure de page comme celle-ci:

-Home
-Cars
  -Volvo 640
   - Pics
   - Info
  -Porsche 911
   - Pics
   - Info

Je voudrais générer une liste de voitures sur la page Cars de toutes les voitures (qui sont des pages enfants de Cars). Comment je ferais ça? La liste est essentiellement un sous-menu qui devrait afficher toutes les voitures dans l'ordre alphabétique (remarque, je n'ai pas besoin de liens vers les "petits-enfants" - Photos, Informations). Je dois également récupérer les données de champ personnalisé de chaque page de voiture et les mettre à côté du lien vers la page .. est-ce possible?

1
cannyboy

Vous pouvez utiliser get_pages pour faire ceci, comme ceci:

<?php
    $args = array(
        'post_type' => 'page',
        'child_of' => 7,
        );
    $postobj = get_pages($args);
    foreach($postobj as $item){
        $dir = get_bloginfo('template_directory'); // Theme directory
        $title = $item->post_title;
        $parent = $item->post_parent;
        $id = $item->guid;
        $name = $item->post_name;

Une fois arrivé ici, vous pouvez extraire vos champs personnalisés et les mettre dans des variables.

        $model_number = get_post_meta($item->ID, 'model_number', true);

J'utiliserais une déclaration if de quelque sorte que ce soit pour construire ces en-têtes. Par exemple, vous pourriez faire:

            if($model_number == true){
                echo stuff;
            } else {
                echo other stuff;
        }
    }
?>

C'est rude, mais je pense que cela pourrait vous conduire assez loin. Essentiellement, vous construisez vos en-têtes par programme et vous retournez tout pour être imprimé. La clé est de tout formater et de bien définir vos conditions.

1
nickmjones

La fonction wp_list_pages() peut vous donner une liste de vos pages enfants. L'obtention de données de champ personnalisées à partir de chaque page nécessiterait cependant une requête distincte et un peu plus de travail. Mais voici un début:

$args = array(
    depth => '1',
    child_of => '123'
);

wp_list_pages( $args );

Cela vous donnera une liste de liens vers toutes les pages enfant de l'ID de page 123. La spécification depth permet d'éviter de récupérer les pages de petits-enfants.

Comme je l'ai déjà dit, obtenir les données de champ personnalisées est un peu plus compliqué. Vous devez d'abord obtenir l'ID de page de chacune de vos pages enfants (probablement en utilisant query_posts()) et les stocker dans un tableau. Ensuite, vous parcourez ce tableau et récupérez les données de champs personnalisés de chaque page.

C'est donc faisable ... mais je ne peux pas vous proposer une solution rapide par cœur.

1
EAMann