我正在使用woocommerce api手动添加订单。
我手动订购了版本产品,并在管理端显示了良好的编辑订单页面。
现在,问题是使用polylang插件的网站。
在那里,有两种语言。我可以用英语成功添加订单。
但是当我尝试用另一种语言(阿拉伯语)添加产品时。它以奇怪的文本格式返回一些订单详细信息。在我的API中它返回:
"product_variation_details": "%d8%a7%d9%84%d8%ad%d8%ac%d9%85: صغير"
我使用下面的代码来获取API中的订单详细信息:
$variation_id = $single_items['item_meta']['_variation_id'][0];
if ($variation_id != 0) {
$variation = wc_get_product($variation_id);
$product_variation_details = wc_get_formatted_variation($variation->get_variation_attributes(), true);
}
我经常搜索,但无法获得更好的解决方案。任何帮助都会受到影响。提前谢谢。
答案 0 :(得分:9)
似乎正在进行一些解码。 Urldecode
如果我拿到给定的字符串并打印出urldecoded,则会返回:
print urldecode("%d8%a7%d9%84%d8%ad%d8%ac%d9%85");
الحجم
我希望这会有所帮助
答案 1 :(得分:2)
尝试使用以下内容替换if
内的所有内容:
$variation = wc_get_product( $variation_id );
$variation_attributes = $variation->get_variation_attributes();
$variation_attributes_decoded = array();
foreach ( $variation_attributes as $name => $value ) {
$decoded_name = rawurldecode( $name );
$variation_attributes_decoded[ $decoded_name ] = $value;
}
$product_variation_details = wc_get_formatted_variation( $variation_attributes_decoded, true );
这是未经测试的。
这是wc_get_formatted_variation()中输出您的问题文字的行:
$variation_list[] = wc_attribute_label( str_replace( 'attribute_', '', $name ) ) . ': ' . rawurldecode( $value );
正如您所看到的,它正在解码$value
而不是$name
。我的解决方案应该提前解码$name
。
编辑:修复了代码错误。