Как получить custom_meta_data - PullRequest
       31

Как получить custom_meta_data

4 голосов
/ 13 февраля 2020

Я надеюсь, что кто-то может помочь, я пытался получить информацию из моего плагина пользовательских полей в Woocommerce (используя его с подписками WooCommerce).

Я пытаюсь собрать детали, чтобы я мог JSON Отправьте его на другую платформу.

Мне удалось подключиться к активному статусу подписки, узнать подробности через переменную $ subscription, JSON расшифровать его и затем захватить часть пользовательских полей, найденную в ' массив meta_data '.

Теперь он сохраняется в переменную с именем $ orderdata.

Переменная выглядит как

array (
  0 => 
  array (
    'id' => 20992,
    'key' => '_billing_parent_first_name',
    'value' => 'Father First Name',
  ),
  1 => 
  array (
    'id' => 20993,
    'key' => '_billing_parent_last_name',
    'value' => 'Father Last Name',
  ),
  2 => 
  array (
    'id' => 20994,
    'key' => '_billing_parent_email',
    'value' => 'father@test.com',
  ),
  3 => 
  array (
    'id' => 20995,
    'key' => '_billing_parent_number',
    'value' => '12345678',
  ),
  4 => 
  array (
    'id' => 20996,
    'key' => '_billing_childs_first_name',
    'value' => 'test',
  ),
  5 => 
  array (
    'id' => 20997,
    'key' => '_billing_childs_last_name',
    'value' => 'test',
  ),
  6 => 
  array (
    'id' => 20998,
    'key' => '_billing_childs_email',
    'value' => 'test@gmail.com',
  ),
  7 => 
  array (
    'id' => 20999,
    'key' => 'is_vat_exempt',
    'value' => 'no',
  ),
  8 => 
  array (
    'id' => 21000,
    'key' => 'thwcfe_ship_to_billing',
    'value' => '1',
  ),
)

Моя цель - сохранить каждое поле как _billing_parent_number в переменная, чтобы я мог отправить ее, используя POST.

Кто-нибудь знает, как я могу захватить нужные мне поля?

Я пробовал множество методов, от поиска в массиве до столбца массива (я использую error_log для тестирования в Wordpress, чтобы увидеть результат).

Я подошел близко к foreach l oop но я не знаю, как получить следующее поле в объекте и получить его значение, next () в этом случае не сработало: (

Любая помощь приветствуется!

add_action( 'woocommerce_subscription_status_active', 'get_details_add_bundle' );

function get_details_add_bundle($subscription) {

   $obj = json_decode($subscription, true);

    error_log($obj);

    $orderData = $obj['meta_data'];

    foreach($orderData as $key => $value) {
       if($key == 'key' && $value="_billing_childs_email"){
         error_log(next($orderData)[2]);
        }  

}

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Я думаю, вы, возможно, думаете об этом слишком много с ключами, значениями и тому подобным. Размещенный вами массив является массивом массивов. Это означает, что вы можете пройти через него с foreach l oop, и вам потребуется subl oop (или другие методы) для доступа к ключам и значениям - но вам даже не нужно go так далеко .

Если мы создадим новый массив (который вы в конечном итоге POST, так что я предполагаю, что вы хотите просто key => value пары), мы можем поместить в него значения sh из подмассивов, так как они Это одномерное, это действительно просто!

$postable = array(); // Create a new array (we'll eventually POST this)

// get each sub array, one at a time
foreach( $orderdata as $data ){
    /* The $postable "key" will be the value of $data['key'], and the value
       pair for it will be the value of $data['value'] */
    $postable[$data['key']] = $data['value'];
}

Теперь, когда мы поместили каждую из этих пар в массив $postable, мы получили простой парный ассоциативный массив key => value:

array(#) {
  ["_billing_parent_first_name"] => string(17) "Father First Name"
  ["_billing_parent_last_name"]  => string(16) "Father Last Name"
  ["_billing_parent_email"]      => string(15) "father@test.com"
  /* … */
}

Вот рабочий пример (для краткости используется усеченный массив): https://3v4l.org/kWQnB

0 голосов
/ 13 февраля 2020

Я получил решение, спасибо за ответы!

function get_details_add_bundle($subscription) {

    $obj = json_decode($subscription, true);
    $orderData = $obj['meta_data'];
    $values = wp_list_pluck( $orderData, 'key', 'value');

    foreach($values as $key => $value) {
        if ($value == 'billing_childs_email') {
          $child_email1 = $key;
        }

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...