/** * Constructor. * * @param array $config Field declaration. * @param array $merge Array of property should be merged. * * @return void */ public function __construct($config, $merge = array('attributes', 'choices')) { // Get all post types $post_types = get_post_types(array('public' => true), 'objects'); // Prepare post types foreach ($post_types as $slug => $defines) { $post_types[$slug] = $defines->labels->name; } // Update choices $this->choices = $post_types; // Call parent method to do remaining initialization parent::__construct($config, $merge); // Prepare value if ('all' == $this->value) { $this->value = array_map('strlen', $this->choices); } }
/** * Add fields. * * @param string $field_id Field object. * @param array $field_attrs Fieldset attributes, e.g. array( 'title' => 'Title', 'class' => 'Some classes' ) * @param string $section_id Section to add field to. * @param string $fieldset_id Fieldset to add field to. * @param string $tab_id Tab to add field to. * @param string $accordion_id Accordion to add field to. * * @return void */ protected function add_field($field_id, $field_attrs = null, $section_id = 'default', $fieldset_id = null, $tab_id = null, $accordion_id = null) { if (is_array($field_id)) { foreach ($field_id as $id => $attrs) { // Build arguments $args = array($id, $attrs); $args[] = isset($attrs['section_id']) ? $attrs['section_id'] : $section_id; $args[] = isset($attrs['fieldset_id']) ? $attrs['fieldset_id'] : $fieldset_id; $args[] = isset($attrs['tab_id']) ? $attrs['tab_id'] : $tab_id; $args[] = isset($attrs['accordion_id']) ? $attrs['accordion_id'] : $accordion_id; // Add field call_user_func_array(array($this, 'add_field'), $args); } } else { // Prepare field attributes if (!isset($field_attrs['name'])) { $field_attrs['name'] = $field_id; } if (!empty($this->name_space)) { $field_attrs['name'] = "{$this->name_space}[{$field_attrs['name']}]"; } if (!isset($field_attrs['text_domain']) && IG_LIBRARY_TEXTDOMAIN != $this->text_domain) { $field_attrs['text_domain'] = $this->text_domain; } if (strpos($field_id, 'ig-form-field-') === false) { $field_id = "ig-form-field-{$field_id}"; } if (!isset($field_attrs['id'])) { $field_attrs['id'] = $field_id; } else { $field_id = $field_attrs['id']; } // Instantiate field renderer $field = IG_Form_Field::get_instance($field_attrs); if (empty($tab_id)) { if (empty($accordion_id)) { if (empty($fieldset_id)) { $this->fields[$section_id]['fields'][$field_id] = $field; } else { $this->fields[$section_id]['fieldsets'][$fieldset_id]['fields'][$field_id] = $field; } } else { if (empty($fieldset_id)) { $this->fields[$section_id]['accordion'][$accordion_id]['fields'][$field_id] = $field; } else { if (isset($this->fields[$section_id]['accordion'][$accordion_id]['fieldsets'][$fieldset_id])) { $this->fields[$section_id]['accordion'][$accordion_id]['fieldsets'][$fieldset_id]['fields'][$field_id] = $field; } elseif (isset($this->fields[$section_id]['fieldsets'][$fieldset_id]['accordion'][$accordion_id])) { $this->fields[$section_id]['fieldsets'][$fieldset_id]['accordion'][$accordion_id]['fields'][$field_id] = $field; } } } } else { if (empty($accordion_id)) { if (empty($fieldset_id)) { $this->fields[$section_id]['tabs'][$tab_id]['fields'][$field_id] = $field; } else { $this->fields[$section_id]['tabs'][$tab_id]['fieldsets'][$fieldset_id]['fields'][$field_id] = $field; } } else { if (empty($fieldset_id)) { $this->fields[$section_id]['tabs'][$tab_id]['accordion'][$accordion_id]['fields'][$field_id] = $field; } else { if (isset($this->fields[$section_id]['tabs'][$tab_id]['accordion'][$accordion_id]['fieldsets'][$fieldset_id])) { $this->fields[$section_id]['tabs'][$tab_id]['accordion'][$accordion_id]['fieldsets'][$fieldset_id]['fields'][$field_id] = $field; } elseif (isset($this->fields[$section_id]['tabs'][$tab_id]['fieldsets'][$fieldset_id]['accordion'][$accordion_id])) { $this->fields[$section_id]['tabs'][$tab_id]['fieldsets'][$fieldset_id]['accordion'][$accordion_id]['fields'][$field_id] = $field; } } } } } }