it-swarm.asia

الحصول على بيانات حقل مخصص من التسلسل الهرمي للصفحة

تخيل لدي موقع تم إعداده بصفحات في هذا النوع من التسلسل الهرمي ..

-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) لدي بعض الحقول المخصصة حيث قمت بإدخال بيانات مختلفة حول السيارة (بالمناسبة ، أنا أستخدم المكون الإضافي قالب حقل مخصص لجعل إدخال هذه البيانات سهلًا في wp-admin). يتم عرض هذه الحقول على الصفحة. (لا يتم إدخال الحقول في المواصفات الفنية وصفحات الصور)

ما أود القيام به هو عرض قائمة على السيارات على الصفحة الرئيسية (أدناه) ، والتي تحصل على البيانات من الحقول المخصصة. ما هي أفضل طريقة للوصول إلى (أ) الوصول إلى بيانات الحقل المخصص هذه (والتي يمكن أن تتغير عند إضافة سيارات جديدة أو تحريرها) ، (ب) عرض البيانات بترتيب معين (على سبيل المثال بالسرعة القصوى) ..؟

---------------------------------------
|   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 أضعاف القيمة 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];
}

(حتى في وظيفة الصلة أعلاه تماما إضافة اختيار (اختيار) الصفحة)

1
edelwater