示例#1
0
 /**
  * 渡されたリビジョンからデータをリストア
  *
  * @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;
 }