Получить информацию об атрибутах продукта в WooCommerce 3

В php я разрабатываю «страницу отдельного продукта», где каждое поле захватывает и отображает данные, извлеченные из базы данных. Я наткнулся на поле базы данных «атрибуты продукта», так как оно сохранило это значение:

a:1:{s:10:"pa_flacone";a:6:{s:4:"name";s:10:"pa_flacone";s:5:"value";s:0:"";s:8:"position";s:1:"0";s:10:"is_visible";s:1:"1";s:12:"is_variation";i:1;s:11:"is_taxonomy";i:1;}}

Честно говоря, я не знаю, как управлять, чтобы извлечь значения и реплицировать их в специальном поле PHP. Это похоже на формат Json. Любая помощь о том, как расшифровать эту информацию и сообщить в форме PHP?

2

Решение

Вы можете использовать специальную функцию WP maybe_unserialize() поскольку ваша строка является сериализованным массивом:

$serialized_string = 'a:1:{s:10:"pa_flacone";a:6:{s:4:"name";s:10:"pa_flacone";s:5:"value";s:0:"";s:8:"position";s:1:"0";s:10:"is_visible";s:1:"1";s:12:"is_variation";i:1;s:11:"is_taxonomy";i:1;}}';

// Unserializing this string
$data_array = maybe_unserialize( $serialized_string );

// Output for test
echo '<pre>'; print_r( $data_array ); echo '</pre>';

Я получу это:

Array
(
[pa_flacone] => Array
(
[name] => pa_flacone
[value] =>
[position] => 0
[is_visible] => 1
[is_variation] => 1
[is_taxonomy] => 1
)

)

Но это некоторые метаданные продукта, которые вы можете получить несериализованным, используя get_post_meta () функция:

Set your product ID
$product_id = 40;

// Get the data (last argument need to be on "false" for serialized arrays)
$attributes_array = get_post_meta( $product_id, '_product_attributes', false);

// Output for test
echo '<pre>'; print_r( $attributes_array ); echo '</pre>';

Вы получите тот же результат.


Чтобы закончить, вы можете получить эти данные через WC_Product Объект для использования всех доступных методов для этого класса:

// Set your product ID
$product_id = 40;

// Get the WC_Product object
$product = wc_get_product( $product_id );

// Using WC_Product method get_attributes()
$product_attributes = $product->get_attributes();

// Output for test
echo '<pre>'; print_r( $product_attributes ); echo '</pre>';

На этот раз вы получите что-то немного другое. все атрибуты данных хранятся в WC_Product_Attribute объекты, и вы должны использовать доступные методы для этого класса, чтобы получить доступ к данным как:

// Set your product ID
$product_id = 40;

// Get the WC_Product object
$product = wc_get_product( $product_id );

// Using WC_Product method get_attributes()
$product_attributes = $product->get_attributes();

// Iterating through each WC_Product_attribute object
foreach( $product_attributes as $attribute_taxonomy => $product_attribute){

// get the name (for example)
$name = $product_attribute->get_name()

// Access to the data in an array of values
$attribute_data = $product_attribute->get_data();
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector