cannyboy
  • 0
Новичок

Получение данных настраиваемого поля из иерархии страниц

  • 0

Представьте, что у меня есть сайт со страницами в такой иерархии.

-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 Field Template, чтобы упростить ввод этих данных в wp -админ). Эти поля отображаются на странице. (поля не заполняются на страницах с техническими характеристиками и изображениями)

Что я хотел бы сделать, так это отобразить список автомобилей на главной странице (ниже), который получает данные из настраиваемых полей. Каким будет лучший способ (а) получить доступ к этим данным настраиваемого поля (которые могут меняться при добавлении или редактировании новых автомобилей) и (б) отобразить данные в определенном порядке (например, по максимальной скорости)..?

---------------------------------------
|   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
Share
  1. Это может помочь вам начать (это для размера, как вы можете видеть, поскольку я делаю значение 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];
    }
    

    (поэтому в функции соединения полностью выше добавьте выбор(ы) страницы))

    • 0

Оставить ответ

You must login to add an answer.