Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have a page structure like this:

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

I'd like to generate a list of cars on the Cars page of all the cars (which are child pages of Cars). How would I do this? The list is basically a sub-menu which should show all the cars in alphabetical order (note, I don't need links to the 'grandchildren' - Pics, Info). I also need to grab Custom Field data from each car page, and put that beside the link to the page.. is that possible?

share|improve this question
add comment

2 Answers 2

up vote 1 down vote accepted

You could use get_pages to do this, like so:

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

Once you get to here, you can pull out your custom fields and put them into variables.

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

I would use an if statement of some kind to build those top headings. For instance you could do:

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

It's rough, but I think this could get you quite a long ways. Essentially, you're programmatically building your headings and returning everything to get printed. The key is formatting everything and getting your conditions set up right.

share|improve this answer
add comment

The wp_list_pages() function can give you a list of your child pages. Grabbing custom field data from each page, though, would require a separate query and a bit more work. But here's a start:

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

wp_list_pages( $args );

This will give you a list of links to all of the child pages of page ID 123. The depth specification is to prevent retrieving grandchild pages as well.

Like I said before, though, getting the custom field data is a bit trickier. You'll need to first get the page ID of each of your child pages (probably using query_posts()) and store them in an array. Then you'll loop through that array and get the custom field data from each page in turn.

So it's doable ... but I can't offer a quick solution off the top of my head.

share|improve this answer
    
Too Lazy to retype an answer, but look over here wordpress.stackexchange.com/q/1198/105 You can basically do the samething as my answer –  Ryan Gibbons Sep 2 '10 at 19:33
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.