it-swarm-ko.tech

페이지 계층에서 사용자 정의 필드 데이터 가져 오기

사이트에 이런 종류의 계층 구조가있는 페이지가 있다고 상상해보십시오.

-Home
-Cars 
 -Volvo 850 
  -Volvo 850 tech spec 
  -Volvo 850 pictures
 -Porsche 911 
  -Porsche 911 tech spec
  -Porsche 911 pictures
 -other cars etc

이제 당신은 내가 차들을 가지고 있다는 것을 알 수 있습니다. 각 자동차 페이지 (Volvo 850, Porsche 911)에는 자동차에 대한 다양한 데이터를 입력하는 Custom Fields가 있습니다 (그런데 Custom Field Template 플러그인 를 사용하여 wp-admin에서이 데이터를 쉽게 입력 할 수 있습니다. 이 필드는 페이지에 표시됩니다. (필드는 기술 사양 및 그림 페이지에 입력되지 않습니다)

내가하고 싶은 것은 사용자 정의 필드에서 데이터를 가져 오는 홈 페이지 (아래)의 자동차 목록을 표시하는 것입니다. (a)이 사용자 정의 필드 데이터 (새 자동차를 추가하거나 편집 할 때 변경 될 수 있음)에 액세스하고 (b) 특정 순서 (예 : 최고 속도)로 데이터를 표시하는 가장 좋은 방법은 무엇입니까?

---------------------------------------
|   Car              |   Top Speed    |
---------------------------------------
| Porsche 911        |   200          |
| Audi 444           |   180          |
| Volvo 840          |   160          |
---------------------------------------

나는 의사 코드가

* find all pages which are an immediate descendant of the Cars page (not the tech spec and pictures)
* get the custom data from these pages
* display data in Top Speed order
1
cannyboy

이 것은 당신을 시작하게 할 것입니다 (이것은 하나의 값을 1 번 가지고 있기 때문에 당신이 볼 수있는 크기입니다) (단지 고급 쿼리의 예제를 제공합니다)

 global $edl_global_join;
 global $edl_global_orderby;
 global $wp_query;

 function edl_posts_join ($join) {
   global $edl_global_join;
   if ($edl_global_join) $join .= " $edl_global_join";
   return $join;
 }

 function edl_posts_orderby ($orderby) {
  global $edl_global_orderby;
  if ($edl_global_orderby) $orderby = $edl_global_orderby;
  return $orderby;
 }

 add_filter('posts_join','edl_posts_join');
 add_filter('posts_orderby','edl_posts_orderby');

 $edl_global_join = 
 "JOIN $wpdb->postmeta meta1 ON (meta1.post_id = $wpdb->posts.ID AND meta1.meta_key = 'TOPSPEED')" .
 "JOIN $wpdb->postmeta meta2 ON (meta2.post_id = $wpdb->posts.ID AND meta2.meta_key = 'ANOTHER_THING')";
 $edl_global_orderby = " meta1.meta_value * meta2.meta_value DESC";

 $wp_query = new WP_Query($args);

그런 다음 루프를 실행하여 "CAR 클래스"를 작성했습니다.이 중 CAR 클래스는 다음과 같은 메타 필드를 표시합니다.

 $car->display_meta_size();

이 클래스는 실제로 다음과 같은 메소드입니다.

    //
// specific display for size overviews
//
function display_meta_size()
{
    $this->mMetaData->GetValuesFromWP();
    ?>
    <table width="100%">
    <?php   
    $this->mMetaData->ShowIcon();
    $this->mMetaData->ShowSize();
    ?>
    </table>
    <?php
} 

getValuesFromWP () 메서드는 wp 메타 데이터 클래스에서 가져온 것입니다.

// get the values stored in WordPress
function GetValuesFromWP() {
    global $post;
    $custom = get_post_custom($post->ID);

    foreach ($this->mArrMetaDataFields as $str_meta_data_field)
    {
        $this->MetaDataWpValues[$str_meta_data_field] = 
                    $custom[$str_meta_data_field][0];
    }
    $this->MetaDataWpValues['SPECIAL'] = $custom['SPECIAL'][0];
}

(그래서 위의 결합 함수에서 페이지 선택을 추가하십시오)

1
edelwater