Сериализованный массив мета-значений WooCommerce в таблице wp_postmeta - PullRequest
1 голос
/ 04 апреля 2019

Я вставляю элементы и атрибуты через SQL.Все работает нормально, но я не могу понять, как _product_attributes в wp_postmeta

Я понимаю логику, кроме s: 7: "pa_hrup" <- где я могу получить 7 и s: 31: "pa_kapaciteta-резервоарджа-за-го "<- где мне взять 31 .. </p>

a:2:{s:7:"pa_hrup";a:6:{s:4:"name";s:7:"pa_hrup";s:5:"value";s:0:"";s:8:"position";i:0;s:10:"is_visible";i:1;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:1;}s:31:"pa_kapaciteta-rezervoarja-za-go";a:6:{s:4:"name";s:31:"pa_kapaciteta-rezervoarja-za-go";s:5:"value";s:0:"";s:8:"position";i:1;s:10:"is_visible";i:1;s:12:"is_variation";i:0;s:11:"is_taxonomy";i:1;}}

1 Ответ

1 голос
/ 04 апреля 2019

Это сериализованный массив строки метаданных , а s:31 - это длина pa_kapaciteta-rezervoarja-za-go в этом случае.a:6 - число пар ключей ключ / значение ok для каждого массива (или подмассив) .

Итак, сериализованный массив:

  • всегда начинается с a: для массива плюс количество пар ключ / значение элементов в нем и :.
  • затем { для элементов начинаются
  • , затем s: для строки плюс длина строкового элемента (ключ или значение) и :, плюс строка ключа или значения.
  • затем ; для разделения каждого ключа или компонента значения
  • , затем } для элементов конца

Сериализованные массивы , могут быть несериализованными с использованием WordPress maybe_unserialize() (или unserialize() в PHP) .
A обычный массив может быть сериализован с использованием WordPress maybe_serialize() (или serialize() в PHP) .

Функции Wordpress, такие как add_post_meta () или update_post_meta () всегда будут сериализовать массивы перед сохранением таблицы meta_value в wp_postmeta.

То же самое для WooCommerce с некоторым связанным методом WC_Data с save() на объектах CRUD и всеми связанными классами хранилищ данных.

с использованием maybe_unserialize() в вашем сериализованном строковом массиве даст:

$values = array( 
    'pa_hrup' => array(
        'name'         => 'pa_hrup',
        'value'        => '',
        'position'     => '0',
        'is_visible'   => '1',
        'is_variation' => '0',
        'is_taxonomy'  => '1'
    ),
    'pa_kapaciteta-rezervoarja-za-go' => array(
        'name'         => 'pa_kapaciteta-rezervoarja-za-go',
        'value'        => '',
        'position'     => '1',
        'is_visible'   => '1',
        'is_variation' => '0',
        'is_taxonomy'  => '1'
    )
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...