Массив сериализованных мета-значений WooCommerce в таблице wp_postmeta

#php #mysql #sql #wordpress #woocommerce

#php #mysql #sql #wordpress ( wordpress) #woocommerce #wordpress

Вопрос:

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

Я понимаю логику, за исключением s: 7: «pa_hrup» <— где я получаю 7 и s: 31: «pa_kapaciteta-rezervoarja-za-go» <— где я получаю 31..

 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:

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

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

  • всегда начинайте с a: массива for, плюс количество пар элементов ключ / значение в нем и : .
  • затем { для элементов запускается
  • затем s: для string, плюс длина элемента string (ключ или значение) и : , плюс строка key или value.
  • затем ; отделить каждый ключевой или ценностный компонент
  • затем } для элементов end

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

Функции WordPress, такие как add_post_meta() или update_post_meta(), всегда сериализуют массивы перед сохранением в meta_value in 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'
    )
);