'PHP SimpleXMLElement Loop cycle
I am using Advanced Order Export For WooCommerce plugin and Advanced Order Export - Custom XML format addon to output custom xml I am trying to display 2 tags and inside section:
<?php
// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class Woe_Custom_XML {
function __construct() {
//add checkbox above buttons
add_action("woe_settings_above_buttons", function ($settings){
$selected = !empty($settings[ 'custom_xml_format' ]) ? 'checked': '';
echo '<br><br>
<input type=hidden name="settings[custom_xml_format]" value="0">
<input type=checkbox name="settings[custom_xml_format]" value="1" '. $selected .'>
Custom XML format<br><br>';
});
//activate hooks only when export starts
add_filter('woe_settings_validate_defaults', function ($settings) {
if( !empty($settings['custom_xml_format']) ) {
$settings['format'] = "XML";//force format
$settings['format_xml_root_tag'] = "RESULT"; //force main tag
add_filter("woe_xml_output_filter", array($this,"woe_xml_make_order"), 10, 2 );
}
return $settings;
} );
}
function woe_xml_make_order($xml,$data) {
global $wpdb;
//to support checkbox "Export all products from the order"
if( ! WC_Order_Export_Engine::$current_job_settings['all_products_from_order'] ) {
$allowed_products = $wpdb->get_col( WC_Order_Export_Data_Extractor::sql_get_product_ids( WC_Order_Export_Engine::$current_job_settings ) );
$include_all_products = false;
}
else
$include_all_products = true;
// get order
$order = new WC_Order(WC_Order_Export_Engine::$order_id);
//make xml for one order
$xml = new SimpleXMLElement( "<RCPT/>" );
// items
$pos = 1;
foreach ( $order->get_items('line_item') as $item_id=>$item ) {
if( !$include_all_products AND !in_array($item['product_id'],$allowed_products) )
continue;
$product = $order->get_product_from_item( $item );
$item_meta = $order->get_item_meta( $item_id );
$itemXML = $xml->addChild("RCP");
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("bnk", get_user_meta($user_id, "bnk", true) );
}
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("inn", get_user_meta($user_id, "inn", true) );
}
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("rsn", get_user_meta($user_id, "rsn", true) );
}
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("nam", get_user_meta($user_id, "nam", true) );
}
//make xml for one order
$xml = new SimpleXMLElement( "<RCPT2/>" );
$itemXML = $xml->addChild("RCP2");
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("bnk", get_user_meta($user_id, "bnk", true) );
}
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("inn", get_user_meta($user_id, "inn", true) );
}
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("rsn", get_user_meta($user_id, "rsn", true) );
}
$post = get_post($item_meta['_product_id'][0] );
$user_id = $post->post_author;
if($user_id) {
$itemXML->addAttribute("nam", get_user_meta($user_id, "nam", true) );
}
}
//format it!
$dom = dom_import_simplexml( $xml );
$dom->ownerDocument->formatOutput = true;
$output_flags = ! empty( WC_Order_Export_Engine::$current_job_settings['format_xml_self_closing_tags'] ) ? null : LIBXML_NOEMPTYTAG;
$xml = $dom->ownerDocument->saveXML( $dom->ownerDocument->documentElement, $output_flags );
return $xml;
}
}
new Woe_Custom_XML();
But it only shows last tag. I don't know what else to post. I'm not strong in php and I hope for help There should be a text with details here, but I don't know what else to add to add a question
<?xml version="1.0" encoding="UTF-8"?>
<RESULT>
<RCPT2>
<RCP2 bnk="data1" inn="data2" rsn="data3" nam="data4"/>
</RCPT2>
<RCPT2>
<RCP2 bnk="data1" inn="data2" rsn="data3" nam="data4"/>
</RCPT2>
</RESULT>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
