wp_postmeta表中的WooCommerce序列化元值数组

时间:2019-04-04 06:18:03

标签: php mysql sql wordpress woocommerce

我正在通过SQL插入项目和属性。一切正常,但我无法弄清楚wp_postmeta中的_product_attributes

我理解逻辑,但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 个答案:

答案 0 :(得分:1)

这是一个元数据字符串序列化数组,在这种情况下,s:31pa_kapaciteta-rezervoarja-za-go的长度。 a:6是每个数组(或子数组)的ok键/值对项的数量。

因此是序列化数组:

  • 对于数组,总是以a:开头,再加上数组中的键/值对和:的数量。
  • 然后{开始输入项目
  • 然后s:表示字符串,加上字符串项(键或值)的长度,:加上字符串或值字符串。
  • 然后;分隔每个键或值组件
  • 然后}结束项目

序列化的数组,可以使用WordPress maybe_unserialize() (或PHP中的unserialize()未序列化
可以使用WordPress maybe_serialize() (或PHP中的serialize()普通数组进行序列化。

诸如add_post_meta()或update_post_meta()之类的Wordpress函数将始终对数组进行序列化,然后再将meta_value保存在wp_postmeta表中。

与WooCommerce相同的是,它与CRUD Objects上的WC_Data有一些相关的save()方法和所有相关的数据存储类。

在序列化的字符串数组上使用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'
    )
);