web-dev-qa-db-ja.com

子ページのリストを生成し、それらのカスタムフィールドを使用する方法

私はこのようなページ構造を持っています:

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

すべての自動車のCarsページに自動車のリストを作成したい(これはCarsの子ページです)。どのようにこれをしますか?リストは基本的にすべての車をアルファベット順に表示するサブメニューです(注、私は '孫'へのリンクを必要としません - 写真、情報)。また、各自動車ページからカスタムフィールドデータを取得して、ページへのリンクの横に配置する必要があります。それは可能ですか。

1
cannyboy

これを行うには、get_pagesを使用できます。

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

ここに着いたら、カスタムフィールドを引き出して変数に入れることができます。

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

私はそれらのトップの見出しを作るためにある種のifステートメントを使うでしょう。たとえば、次のようにします。

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

それはラフですが、これはあなたにかなり長い道のりを与えることができると思います。基本的には、プログラムによって見出しを作成し、すべてを返して印刷します。重要なのは、すべてをフォーマットして、自分の条件を正しく設定することです。

1
nickmjones

wp_list_pages()関数はあなたにあなたの子供のページのリストを与えることができます。ただし、各ページからカスタムフィールドデータを取得するには、個別のクエリともう少し作業が必要です。しかし、ここから始まります:

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

wp_list_pages( $args );

これにより、ページID 123のすべての子ページへのリンクのリストが表示されます。depthの指定では、孫ページも取得されないようにします。

ただし、前述したように、カスタムフィールドデータを取得するのは少し面倒です。最初にそれぞれの子ページのページIDを取得し(おそらくquery_posts()を使用して)、それらを配列に格納する必要があります。次に、その配列をループ処理して各ページからカスタムフィールドデータを順番に取得します。

それでそれは実行可能です...しかし私は私の頭の上からすぐに解決策を提供することはできません。

1
EAMann