Last active
January 30, 2019 15:56
-
-
Save skillio/83d8910e4248500a4289410fe06ba300 to your computer and use it in GitHub Desktop.
Woocommerce Shipstation Integration tiny patch--xml output filter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Apologies for formatting, this was originally intended to be a ticket, but it errored. */ | |
// Line 295 of Woocommerce Shipstation Integration 4.1.27 includes/api-requests/class-wc-shipstation-api-export.php is currently: | |
$orders_xml->appendChild( $order_xml ); | |
// Proposed Change: | |
$orders_xml->appendChild( apply_filters( 'woocommerce_shipstation_export_order_xml', $order_xml) ); | |
/* | |
Lots of ways this can be used, for example, pulling from a staging site and using an internal email so as not to notify customers when testing. | |
Or customizing "free shipping" output to be mapped, or any other fields, including the order items. | |
I've whipped up some code examples that could go in the documentation and show the utility of this: | |
*/ | |
// changing customer email conditionally with simpleXML | |
public function export_order_xml( DOMElement $order_xml, DOMDocument $dom) { | |
if ( is_dev_site() ) { | |
$xml = simplexml_import_dom($order_xml); | |
$xml->Customer->BillTo->Email = '[email protected]; | |
$order_xml = dom_import_simplexml($xml); | |
} | |
return $order_xml; | |
} | |
/* | |
Note that the $xml (DOMDocument) isn't used in this example, but is included in case devs aren't using simpleXML. | |
This lets them creating a new DOMDocument and receiving the "Wrong Document" Error" when appending. Example code for this (I'm inexpert with DOMDocument, bear with me): | |
*/ | |
// Changing customer email conditionally with DOMDocument | |
public function export_order_xml( DOMElement $order_xml) { | |
if ( is_dev_site() ) { | |
$dom = $order_xml->ownerDocument; | |
$order_node = $dom->appendChild($order_xml); | |
$xp = new DOMXPath($dom); | |
$email = $xp->query('/Order/Customer/BillTo/Email')->item(0); | |
$new_email = $email->cloneNode(); | |
$new_email->nodeValue = '[email protected]'; | |
$email->parentNode->replaceChild($new_email, $email); | |
} | |
return $order_node; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
As an update to this, I don't believe the DOMDocument is necessary. Being inexpert with DOMDocument as I mentioned, I wasn't aware of the usage of ownerDocument. Example and hook have been updated to not include the document itself