从页面层次结构中获取自定义字段数据

时间:2010-08-31 作者:cannyboy

想象一下,我有一个用这种层次结构中的页面设置的站点。。

-Home
-Cars 
 -Volvo 850 
  -Volvo 850 tech spec 
  -Volvo 850 pictures
 -Porsche 911 
  -Porsche 911 tech spec
  -Porsche 911 pictures
 -other cars etc
现在你可以看到我有很多车。在每个汽车页面(沃尔沃850、保时捷911)上,我都有一些自定义字段,在这些字段中输入了有关汽车的各种数据(顺便说一下,我使用Custom Field Template plugin 以便在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 个回复
最合适的回答,由SO网友:edelwater 整理而成

这一个可能会让您开始(这一个是针对您可以看到的大小,因为我的值是值1乘以值2)(仅举一个更高级查询的示例)

 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->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];
}
(因此,在上面的join函数中添加页面选择)

结束

相关推荐