Woocommerceの製品バリエーションとその属性に関して大きな問題に直面しています。利用可能な各製品バリエーションの各属性を含むテーブルを表示しようとしています。しかし、Woocommerceは属性を小文字で完全にポストメタに保存し、スラッシュとü、ö、äなどのドイツ語の特殊文字を置き換えます。属性は$ variation-> get_variation_attributes()で取得します。たとえば管理パネルのドロップダウンに表示される保存値をデータベースで検索しましたが、割り当てられているバリエーションへのリンクなしで次のように保存されます。
a:5:{s:10:"bestell-nr";a:6:{s:4:"name";s:11:"Bestell-Nr.";s:5:"value";s:9:"1 | 2 | and so on...
表示する正しい形式で属性を取得するにはどうすればよいですか?
ご協力いただきありがとうございます!
実際には、製品属性は実際にはカスタム分類法の用語であるため、その特定の分類法の用語を取得する必要があります。すべての属性分類法の前には「pa_」が付いています。したがって、サイズ属性は「pa_size」分類法になります。また、バリエーションIDは、バリエーションの投稿IDです。
ただし、表示方法に応じて、WooCommerceにはバリエーションのすべての属性を表示するための組み込み関数があります。
以下に、すべてのバリエーション属性の定義リストを表示します。
echo wc_get_formatted_variation( $product->get_variation_attributes() );
そして、true
の2番目のパラメーターを渡すと、フラットリストが表示されます。
echo wc_get_formatted_variation( $product->get_variation_attributes(), true );
これは私にとってはうまくいくようです。お役に立てれば。
$post = get_post();
$id = $post->ID;
$product_variations = new WC_Product_Variable( $id );
$product_variations = $product_variations->get_available_variations();
print_r($product_variations);
これはclass-wc-product-variable.phpにあります
したがって、基本的にそのページを見回すと、便利な関数がたくさん見つかります。
これが私がまとめたものです。
$product_children = $product_variations->get_children();
$child_variations = array();
foreach ($product_children as $child){
$child_variations[] = $product_variations->get_available_variation($child);
}
print_r($child_variations);
すべてではなく、バリエーション属性の1つだけを公開したかったのです。他の誰かに役立つ場合に備えて、このコードを提供してください。
get_variation_attributes()はすべての属性を取得します
wc_get_formatted_variation()は、渡された配列のフォーマットされたバージョンを返します
$attributes = $productVariation->get_variation_attributes() ;
if ( $attributes [ 'attribute_pa_colour' ] ) {
$colour = [ 'attribute_pa_colour' => $attributes [ 'attribute_pa_colour'] ];
echo wc_get_formatted_variation ( $colour );
}
私がそれを行う方法は、「get_post_meta」を使用することです。
echo get_post_meta( $variation_id, 'attribute_name_field', true);
これが誰かを助けることを願っています。
ちょうどこれを通過しました...これが私の解決策です。複数の属性とすべてのバリエーションを処理します。あなたはただ属性スラッグを知っている必要があります。
$items = $order->get_items();
foreach( $items as $item_id => $product )
{
$ProductName = $product->get_name(); /
if($product->is_type( 'simple' ))
$CoreProductName = $ProductName; // No variance
else
{
list($CoreProductName, $ThrowAway) = explode(" - ",$ProductName, 2);
$variation_id = $product['variation_id'];
$variation = new WC_Product_Variation($variation_id);
$attributes = $variation->get_variation_attributes();
$SelectedAttribute1 = $attributes['attribute_YOUR_SLUG1_PER_PRODUCT'];
$SelectedAttribute2 = $attributes['attribute_YOUR_SLUG2_PER_PRODUCT'];
}
}
wp_get_post_termsを使用して、正しい分散属性を取得しました。
global $product;
$variations = $product->get_available_variations();
$var = [];
foreach ($variations as $variation) {
$var[] = $variation['attributes'];
}
var_dump($var);
//xxx to get attribute values with correct lower-upper-mixed-case
foreach ($var as $key => $arr) {
foreach ($arr as $orig_code => $lowercase_value) {
$terms_arr = wp_get_post_terms( $product->id, str_replace('attribute_','',$orig_code), array( 'fields' => 'names' ) );
foreach ($terms_arr as $term) {
if (strtolower($term) == $lowercase_value) {
$var[$key][$orig_code] = $term;
break;
}
}
}
}
var_dump($var);
結果:
ハードコードの前
array (size=1)
0 =>
array (size=2)
'attribute_pa_width' => string 'none' (length=4)
'attribute_pa_code' => string 'valancese' (length=9)
ハードコード後:
array (size=1)
0 =>
array (size=2)
'attribute_pa_width' => string 'None' (length=4)
'attribute_pa_code' => string 'ValanceSe' (length=9)