Добавить новый / обновить $ ключ и $ значение в массив в WordPress - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь добавить / обновить новый ключ $ и значение $ в существующем массиве.

Ввод формы:

<input name="flyer_packages[55][price][custom_price]" value="1000">

ТекущийМассив:

Array (
      [55] => Array (
                    [date] => 10 October 
                    [pricing_option] => true 
                    [price] => Array (
                                     [price_amount] => 3 000     
                                     [price_descriptor] => None 

Функция WP для добавления новой мета:

if (!empty ($_POST['flyer_packages'])) {
     $flyer_packages = get_post_meta($pid, 'flyer_packages', true);
     foreach ($flyer_packages as $flyer_package) {
         foreach ($flyer_package[price] as $key => $value) {
             update_post_meta( $pid, 'flyer_packages' , $_POST['flyer_packages']);
         }
     }
}

Ожидаемый результат:

Array (
      [55] => Array (
                    [date] => 10 October
                    [pricing_option] => true 
                    [price] => Array (
                                     [price_amount] => 3 000     
                                     [price_descriptor] => None
                                     [custom_price] => 1 000 

Фактический результат:

Array (
      [55] => Array (
                    [price] => Array (
                                     [custom_price] => 1 000

Как видно, результат добавляет новый ключ и значение, но удаляет все остальные ключи и значения в массиве.

Может кто-нибудь, пожалуйста, посоветуйте, высоко ценится.

1 Ответ

0 голосов
/ 25 октября 2018

Это происходит потому, что вы заменяете значение, вы должны сначала объединить массивы

   if (!empty ($_POST['flyer_packages'])) {
      $flyer_packages = get_post_meta($pid, 'flyer_packages', true);
      $new_value = $_POST['flyer_packages'];
      custom_keys_recursive($new_value, $flyer_packages);   
      update_post_meta( $pid, 'flyer_packages', $flyer_packages);   
   }  

   function custom_keys_recursive($value, &$array) {
     foreach ($value as $k=>$v) {
        if (is_array($v)) {
          custom_keys_recursive($v, $array[$k]);
        } else {
          $array[$k] = $v;
        }
     }
   }
...