it-swarm-id.com

Mendapatkan data Bidang Kustom dari hierarki halaman

Bayangkan saya memiliki situs yang diatur dengan halaman-halaman dalam hierarki semacam ini ..

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

Sekarang Anda dapat melihat bahwa saya memiliki banyak Mobil. Pada masing-masing halaman mobil (Volvo 850, Porsche 911) saya memiliki beberapa Bidang Kustom di mana saya telah memasukkan berbagai data tentang Mobil (omong-omong, saya menggunakan plugin Custom Field Template untuk memudahkan entri data ini di wp-admin). Bidang-bidang ini ditampilkan pada halaman. (bidang tidak dimasukkan pada halaman spesifikasi dan gambar teknologi)

Yang ingin saya lakukan adalah menampilkan daftar pada mobil-mobil di halaman Beranda (di bawah), yang mendapatkan data dari Bidang Kustom. Apa cara terbaik untuk (a) mengakses data bidang khusus ini (yang dapat berubah ketika mobil baru ditambahkan atau diedit), dan (b) menampilkan data dalam urutan tertentu (misalnya dengan kecepatan tinggi) ..?

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

Saya kira pseudo-code-nya

* 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

Yang ini mungkin membantu Anda memulai (yang ini untuk ukuran seperti yang Anda lihat karena saya nilai 1 kali nilai 2) (hanya untuk memberikan contoh pertanyaan yang lebih maju)

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

dan kemudian jalankan loop saya menulis "kelas CAR" yang antara lain menampilkan bidang meta seperti:

 $car->display_meta_size();

yang sebenarnya adalah metode berikut di kelas itu:

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

di mana metode GetValuesFromWP () berasal dari kelas metadata 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];
}

(jadi dalam fungsi gabung sepenuhnya di atas tambahkan pemilihan halaman)

1
edelwater