it-swarm.asia

Özel Alan verilerini sayfa sıradüzeninden alma

Bu tür bir hiyerarşide sayfalarla kurulmuş bir sitem olduğunu hayal edin.

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

Artık bir sürü aracım olduğunu görebiliyorsunuz. Araba sayfalarının her birinde (Volvo 850, Porsche 911) Araba hakkında çeşitli veriler girdiğim bazı Özel Alanlarım var (bu arada, Özel Alan Şablonu eklentisini kullanıyorum wp-admin'de bu verilerin girişini kolaylaştırmak için). Bu alanlar sayfada görüntülenir. (teknik özellikler ve resimler sayfalarına alanlar girilmez)

Yapmak istediğim, Giriş sayfasındaki (aşağıda) arabaların bir listesini görüntülemek. Bu da Özel Alanlardan veri alıyor. (A) bu özel alan verilerine erişmenin (yeni arabalar eklendiğinde veya düzenlendiğinde değişebilen) ve (b) verileri belirli bir sırada (örneğin, en yüksek hızda) görüntülemek için en iyi yol ne olabilir?

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

Sanırım sözde kod

* 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

Bu size başlamanıza neden olabilir (bu değer, 1 değer 2 katı yaptığımdan beri görebileceğiniz boyut içindir) (yalnızca daha gelişmiş sorgulara bir örnek vermek için)

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

ve sonra sadece döngüyü çalıştırın, diğerleri gibi meta alanları gösteren bir "CAR sınıfı" yazdım:

 $car->display_meta_size();

bu aslında o sınıfta aşağıdaki yöntemdir:

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

burada GetValuesFromWP () yöntemi wp meta veri sınıfındandır:

// 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];
}

(bu yüzden tamamen yukarıda birleştirme fonksiyonunda sayfa seçimi ekleyin)

1
edelwater