diff --git a/src/Orders/Order/Shipping.php b/src/Orders/Order/Shipping.php index 05c2597..7075a6e 100644 --- a/src/Orders/Order/Shipping.php +++ b/src/Orders/Order/Shipping.php @@ -99,6 +99,15 @@ private function set_shipping_rate() { return; } $shipping_rate = ShoppingFeedHelper::get_wc_shipping_from_sf_carrier( $this->method ); + + /** + * Filter the shipping method data used when creating the shipping rates. + * + * @param array $shipping_rate the shipping method data. + * @param OrderResource $sf_order the ShoppingFeed order. + */ + $shipping_rate = apply_filters( 'shopping_feed_order_shipping_rate', $shipping_rate, $this->sf_order ); + if ( empty( $shipping_rate ) ) { $shipping_rate = $default_shipping_method; } diff --git a/src/ShoppingFeedHelper.php b/src/ShoppingFeedHelper.php index b9e3332..6fdae3c 100644 --- a/src/ShoppingFeedHelper.php +++ b/src/ShoppingFeedHelper.php @@ -56,27 +56,49 @@ public static function get_wc_version() { } /** - * Return the feed's directory + * Return the feed's directory. + * * @return string */ public static function get_feed_directory() { - return SF_FEED_DIR; + /** + * Filter the path to the directory where product feeds are stored. + * + * @param string $path Path to the directory. + */ + return (string) apply_filters( 'shopping_feed_feed_directory_path', SF_FEED_DIR ); } /** - * Return the feed's parts directory + * Return the feed's parts directory. + * * @return string */ public static function get_feed_parts_directory() { - return SF_FEED_PARTS_DIR; + /** + * Filter the path to the directory where product feeds parts are stored. + * + * @param string $path Path to the directory. + */ + return (string) apply_filters( 'shopping_feed_feed_parts_directory_path', SF_FEED_PARTS_DIR ); } /** - * Return the feed's file name + * Return the feed's file name. + * + * The filename doesn't contain the file extension. + * * @return string */ public static function get_feed_filename() { - return 'products'; + /** + * Filter the product feed's filename. + * + * The filename must not contain the file extension. + * + * @param string $path Feed's filename. + */ + return (string) apply_filters( 'shopping_feed_feed_filename', 'products' ); } /** diff --git a/tests/wpunit/Feed/HelperFunctionsTest.php b/tests/wpunit/Feed/HelperFunctionsTest.php new file mode 100644 index 0000000..e3d886f --- /dev/null +++ b/tests/wpunit/Feed/HelperFunctionsTest.php @@ -0,0 +1,83 @@ +assertEquals( + self::$upload_dir['basedir'] . '/shopping-feed', + ShoppingFeedHelper::get_feed_directory() + ); + } + + public function test_get_feed_directory_filter() { + $custom_feed_directory = '/tmp/shopping-feed'; + + add_filter( + 'shopping_feed_feed_directory_path', + function ( $dir ) use ( $custom_feed_directory ) { + return $custom_feed_directory; + } + ); + + $this->assertEquals( + $custom_feed_directory, + ShoppingFeedHelper::get_feed_directory() + ); + } + + public function test_get_feed_part_directory() { + $this->assertEquals( + self::$upload_dir['basedir'] . '/shopping-feed/parts', + ShoppingFeedHelper::get_feed_parts_directory() + ); + } + + public function test_get_feed_part_directory_filter() { + $custom_feed_directory = '/tmp/shopping-feed-parts'; + + add_filter( + 'shopping_feed_feed_parts_directory_path', + function ( $dir ) use ( $custom_feed_directory ) { + return $custom_feed_directory; + } + ); + + $this->assertEquals( + $custom_feed_directory, + ShoppingFeedHelper::get_feed_parts_directory() + ); + } + + public function test_get_feed_filename() { + $this->assertEquals( + 'products', + ShoppingFeedHelper::get_feed_filename() + ); + } + + public function test_get_feed_filename_filter() { + $custom_feed_filename = 'custom-products'; + + add_filter( + 'shopping_feed_feed_filename', + function ( $filename ) use ( $custom_feed_filename ) { + return $custom_feed_filename; + } + ); + + $this->assertEquals( + $custom_feed_filename, + ShoppingFeedHelper::get_feed_filename() + ); + } +} \ No newline at end of file