/** * そのフィールドのメタデータを取得 * * @param WP_Post|WP_User|object $object * @param array $field * @param bool $is_repeatable このフィールドが所属するグループが repeat かどうか * @return mixed $post_meta */ protected static function get_value_by_field($object, $Field, $is_repeatable) { $field_name = $Field->get('name'); if (!$field_name) { return; } $Meta = new Smart_Custom_Fields_Meta($object); // ループ内の複数値項目の場合 $field_type = $Field->get_attribute('type'); $repeat_multiple_data = self::get_repeat_multiple_data($object); if (is_array($repeat_multiple_data) && isset($repeat_multiple_data[$field_name])) { if ($Meta->is_saved_by_key($field_name) || !$Meta->is_use_default_when_not_saved()) { $_meta = $Meta->get($field_name); } else { $_meta = self::get_default_value($Field); } $start = 0; foreach ($repeat_multiple_data[$field_name] as $repeat_multiple_key => $repeat_multiple_value) { if ($repeat_multiple_value === 0) { $value = array(); } else { $value = array_slice($_meta, $start, $repeat_multiple_value); $start += $repeat_multiple_value; } if ($Meta->is_saved_by_key($field_name) || $Meta->is_use_default_when_not_saved()) { $value = apply_filters(SCF_Config::PREFIX . 'validate-get-value', $value, $field_type); } $meta[$repeat_multiple_key] = $value; } } else { if ($Field->get_attribute('allow-multiple-data') || $is_repeatable) { if ($Meta->is_saved_by_key($field_name) || !$Meta->is_use_default_when_not_saved()) { $meta = $Meta->get($field_name); } else { $meta = self::get_default_value($Field); } } else { if ($Meta->is_saved_by_key($field_name) || !$Meta->is_use_default_when_not_saved()) { $meta = $Meta->get($field_name, true); } else { $meta = self::get_default_value($Field, true); } } if ($Meta->is_saved_by_key($field_name) || $Meta->is_use_default_when_not_saved()) { $meta = apply_filters(SCF_Config::PREFIX . 'validate-get-value', $meta, $field_type); } } return $meta; }
/** * 非複数許可フィールドのメタデータを取得 * * @param int $id 投稿ID or ユーザーID * @param Smart_Custom_Fields_Field_Base $Field * @param int $index * @return string or null */ public function get_single_data_field_value($object, $Field, $index) { $Meta = new Smart_Custom_Fields_Meta($object); $id = $Meta->get_id(); $field_name = $Field->get('name'); if (is_null($index)) { return SCF::get_default_value($Field, true); } if ($Meta->is_saved_by_key($field_name) || !$Meta->is_use_default_when_not_saved()) { $value = $Meta->get($field_name); if (isset($value[$index])) { return $value[$index]; } } return SCF::get_default_value($Field, true); }