ฉันจะรับฟิลด์ของฟิลด์บางประเภทได้อย่างไร


13

ฉันเห็นวิธีรับรายการเขตข้อมูลตามเอนทิตีและรวมกับfield_info_instances()และfield_info_field()แต่ฉันไม่เห็นวิธีรับฟิลด์ทั้งหมดสำหรับประเภทเฉพาะ

ฉันสามารถทำอาหารนี้ขึ้นมาเพื่อทำสิ่งที่ฉันต้องการ:

function field_get_fields_of_type($type) {
  $fields_info = field_info_instances();
  $return = array();
  foreach ($fields_info as $entity => $bundles) {
    foreach ($bundles as $bundle => $fields) {
      foreach ($fields as $field_name => $info) {
        $more_info_because_type_isnt_included = field_info_field($field_name);
        if ( $more_info_because_type_isnt_included['type'] == $type) {
          $return[$field_name] = $more_info_because_type_isnt_included;
        }
      }
    }
  }
  return $return;
}

dpm(field_get_fields_of_type('entityreference')); // prints out all entityreference fields

แต่ดูเหมือนว่าจะเป็นรหัสที่แย่มากและการวนซ้ำที่แย่มากเพื่อให้ได้สิ่งที่น่าจะเข้าถึงได้ผ่าน Field API

ไม่มีใครรู้ถึงฟังก์ชั่น Field API ที่จะดึงข้อมูลที่ฉันกำลังมองหาได้อย่างมีประสิทธิภาพมากขึ้นหรือไม่

คำตอบ:


23

ฉันเจอสิ่งนี้เมื่อวันก่อนและจำได้ว่าเคยเห็นคำถามนี้ดังนั้นนี่คือฟังก์ชั่นที่ไม่รู้จัก (ฉันไม่เคยเห็นใครพูดถึงมันในบล็อกหรืออะไร):

field_read_fields ()

และฟังก์ชั่นสหาย:

field_read_instances ()

ตัวอย่างเช่นรับฟิลด์คำศัพท์อนุกรมวิธานทั้งหมด:

$taxonomy_fields = field_read_fields(array('type' => 'taxonomy_term_reference'));

หรือรับอินสแตนซ์ของเขตข้อมูลด้วยชื่อเครื่องของfield_image:

$image_field_instances = field_read_instances(array('field_name' => 'field_image'));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.