#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'
)
);