/** * 渡されたリビジョンからデータをリストア * * @param WP_Post $revision */ public function restore($revision) { switch ($this->meta_type) { case 'post': $object = get_post($this->id); break; default: $object = null; } if (is_null($object) || !is_a($revision, 'WP_Post')) { return; } $settings = SCF::get_settings($object); foreach ($settings as $Setting) { $fields = $Setting->get_fields(); foreach ($fields as $Field) { $field_name = $Field->get('name'); $this->delete($field_name); $value = SCF::get($field_name, $revision->ID); if (is_array($value)) { foreach ($value as $val) { if (is_array($val)) { foreach ($val as $v) { // ループ内複数値項目 $this->add($field_name, $v); } } else { // ループ内単一項目 or ループ外複数値項目 $this->add($field_name, $val); } } } else { // ループ外単一項目 $this->add($field_name, $value); } } } $repeat_multiple_data = SCF::get_repeat_multiple_data($revision); $repeat_multiple_data_name = SCF_Config::PREFIX . 'repeat-multiple-data'; $this->delete($repeat_multiple_data_name); $this->update($repeat_multiple_data_name, $repeat_multiple_data); }
/** * @group get_repeat_multiple_data */ public function test_get_repeat_multiple_data() { update_post_meta($this->post_id, SCF_Config::PREFIX . 'repeat-multiple-data', array('checkbox3' => array(1, 2))); $this->assertSame(array('checkbox3' => array(1, 2)), SCF::get_repeat_multiple_data(get_post($this->post_id))); }
/** * 複数許可フィールドのメタデータを取得 * * @param WP_Post|WP_User|object $object * @param Smart_Custom_Fields_Field_Base $Field * @param int $index * @return array or null */ public function get_multiple_data_field_value($object, $Field, $index) { $Meta = new Smart_Custom_Fields_Meta($object); $field_name = $Field->get('name'); if (is_null($index)) { return SCF::get_default_value($Field); } if (!$Meta->is_saved()) { return SCF::get_default_value($Field); } $value = $Meta->get($field_name); // ループのとき $repeat_multiple_data = SCF::get_repeat_multiple_data($object); if (is_array($repeat_multiple_data) && isset($repeat_multiple_data[$field_name])) { $now_num = 0; if (is_array($repeat_multiple_data[$field_name]) && isset($repeat_multiple_data[$field_name][$index])) { $now_num = $repeat_multiple_data[$field_name][$index]; } // 自分($index)より前の個数の合計が指す index が start $_temp = array_slice($repeat_multiple_data[$field_name], 0, $index); $sum = array_sum($_temp); $start = $sum; if ($now_num) { $value = array_slice($value, $start, $now_num); } } return $value; }
/** * Getting the multi-value field meta data. * * @param WP_Post|WP_User|WP_Term $object * @param Smart_Custom_Fields_Field_Base $Field * @param int $index * @return array or null */ public function get_multiple_data_field_value($object, $Field, $index) { $Meta = new Smart_Custom_Fields_Meta($object); $field_name = $Field->get('name'); if (is_null($index)) { return SCF::get_default_value($Field); } if (!$Meta->is_saved()) { return SCF::get_default_value($Field); } $value = $Meta->get($field_name); // in the loop $repeat_multiple_data = SCF::get_repeat_multiple_data($object); if (is_array($repeat_multiple_data) && isset($repeat_multiple_data[$field_name])) { $now_num = 0; if (is_array($repeat_multiple_data[$field_name]) && isset($repeat_multiple_data[$field_name][$index])) { $now_num = $repeat_multiple_data[$field_name][$index]; } // The index is starting point to refer to the total of the previous number than me ($index) $_temp = array_slice($repeat_multiple_data[$field_name], 0, $index); $sum = array_sum($_temp); $start = $sum; if ($now_num) { $value = array_slice($value, $start, $now_num); } else { $value = array(); } } return $value; }