Home › Forums › General Issues › Woocommerce order exports variable products
Hello everyone.
I urgently need help and am looking for an ingenious idea for the following problem: How can I retrieve ACF information for variable products when exporting orders from Woocommerce?
Details:
> Orders should be exported from Woocommerce with the plugin “WP ALL EXPORT PRO” and ACF to my fulfillment partner as XML
> ONLY relevant orders or products with necessary information should be filtered, which works well for “simple products” with the following code
> Variable products (T-shirts) are also correctly recognized and exported by the code – BUT all ACF information remains empty and is not retrieved
What have I created?
> Created variable product “T-SHIRT” in the Woocommerce Dashboard
> Woocommerce attribute “SIZE” with the variants S / M / L / XL
> ACF field group “DDF” with desired text fields created to export the necessary ACF information later for orders (in addition to simple products also for product variants e.g. T-SHIRT, SIZE “L”)
> Field group rule: content type -> is equal to -> product
> Do I also have to apply the rule here? Taxonomy -> is equal to -> “SIZE”
Do I have to add or create other settings in ACF?
or is this only possible with ACF Pro?
->
/////CURRENT STATUS CODE IN WP ALL EXPORT
//////XML EDITOR
<?xml version="1.0" encoding="UTF-8"?>
<orders>
<!-- BEGIN LOOP -->
<order>
<commission>{Bestell ID}</commission>
<production>2</production>
<receiver>
<line1>{Shipping First Name} {Shipping Last Name}</line1>
<line2>{Shipping Company}</line2>
<street>{Shipping Address 1}</street>
<streetnumber>{Shipping Address 2}</streetnumber>
<country_code>{Shipping Country}</country_code>
<zip>{Shipping Postcode}</zip>
<city>{Shipping City}</city>
<email>{Customer Account Email Address}</email>
</receiver>
<items>
[my_get_order_items({Bestell ID})]
</items>
</order>
<!-- END LOOP -->
</orders>
/////FUNCTION EDITOR
<?php
function my_get_order_items($Bestell_id) {
// Check if the Bestell ID is valid
if (!$Bestell_id) {
return false;
}
// Fetch the order
$order = wc_get_order($Bestell_id);
if (!$order) {
return false;
}
// Initialize the string to store order details
$order_details = "";
// Loop through each order item
foreach ($order->get_items() as $item_id => $item) {
// Get the product object
$product = $item->get_product();
// Skip if there's no product associated with the item
if (!$product)
{ continue; }
if (!(
strpos($item->get_name(), 'KERAMIKTASSE') !== false ||
strpos($item->get_name(), 'BAUMWOLLTASCHE') !== false ||
strpos($item->get_name(), 'T-SHIRT') !== false))
{ continue; }
$order_details .= "**LT**item**GT**";
$order_details .= "**LT**ID**GT**" . $product->get_sku() . "**LT**/ID**GT**";
$order_details .= "**LT**produktname**GT**" . $item->get_name() . "**LT**/produktname**GT**";
$order_details .= "**LT**amount**GT**" . $item->get_quantity() . "**LT**/amount**GT**";
$order_details .= "**LT**upload**GT**" . maybe_serialize( get_field( 'upload', $product->get_id() ) ) . "**LT**/upload**GT**";
$order_details .= "**LT**size**GT**" . maybe_serialize( get_field( 'size', $product->get_id() ) ) . "**LT**/size**GT**";
$order_details .= "**LT**groesse**GT**" . maybe_serialize( get_field( 'produktgröße', $product->get_id() ) ) . "**LT**/groesse**GT**";
$order_details .= "**LT**material**GT**" . maybe_serialize( get_field( 'material', $product->get_id() ) ) . "**LT**/material**GT**";
$order_details .= "**LT**print**GT**" . maybe_serialize( get_field( 'print', $product->get_id() ) ) . "**LT**/print**GT**";
$order_details .= "**LT**variante**GT**" . maybe_serialize( get_field( 'variante', $product->get_id() ) ) . "**LT**/variante**GT**";
$order_details .= "**LT**category**GT**" . maybe_serialize( get_field( 'category', $product->get_id() ) ) . "**LT**/category**GT**";
//add options to the output
$order_details .= "**LT**Options**GT**";
$order_details .= "**LT**Option**GT****LT**ID**GT**" . "1996" . "**LT**/ID**GT****LT**Value**GT**" . maybe_serialize( get_field( 'value_115', $product->get_id() ) ) . "**LT**/Value**GT****LT**/Option**GT**";
$order_details .= "**LT**Option**GT****LT**ID**GT**" . "2489" . "**LT**/ID**GT****LT**Value**GT**" . maybe_serialize( get_field( 'value_117', $product->get_id() ) ) . "**LT**/Value**GT****LT**/Option**GT**";
$order_details .= "**LT**Option**GT****LT**ID**GT**" . "2056" . "**LT**/ID**GT****LT**Value**GT**" . maybe_serialize( get_field( 'value_118', $product->get_id() ) ) . "**LT**/Value**GT****LT**/Option**GT**";
$order_details .= "**LT**/Options**GT**";
$order_details .= "**LT**/item**GT**";
}
return $order_details;
}
?>
->
Does anyone have an idea?
Many thanks.
You must be logged in to reply to this topic.
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.