Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/Feed/FeedBuilder/FeedBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,14 @@ public function render_feed( $lang = null ): void {
* @return bool|\WP_Error
*/
protected function write_products_feed( string $file_path, array $products ) {

/**
* Filter the list of products to be written to the feed.
*
* @param \WC_Product[] $products
*/
$products = apply_filters( 'shopping_feed_products_for_feed', $products );

$products_list = Products::get_instance()->format_products( $products );
try {
$generator = Generator::make( $file_path );
Expand Down
10 changes: 10 additions & 0 deletions src/Orders/Order/Products.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,16 @@ private function mapping_product( $sf_product, $references_aliases = [] ) {
$wc_product_id = $references_aliases[ $sf_product->getReference() ] ?? $sf_product->getReference();

if ( 'sku' === $product_identifier ) {

/**
* Filter the SKU from the ShoppingFeed order.
*
* @param string $wc_product_id
* @param OrderItem $sf_product
* @param array $references_aliases
*/
$wc_product_id = apply_filters( 'shopping_feed_order_products_product_sku', $wc_product_id, $sf_product, $references_aliases );

$wc_product_id = wc_get_product_id_by_sku( $wc_product_id );
if ( ! $wc_product_id ) {
return array();
Expand Down
9 changes: 9 additions & 0 deletions src/Orders/Order/Shipping.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 );

Comment thread
petitphp marked this conversation as resolved.
if ( empty( $shipping_rate ) ) {
$shipping_rate = $default_shipping_method;
}
Expand Down
34 changes: 28 additions & 6 deletions src/ShoppingFeedHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -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' );
}

/**
Expand Down
83 changes: 83 additions & 0 deletions tests/wpunit/Feed/HelperFunctionsTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
<?php

namespace ShoppingFeed\ShoppingFeedWC\Tests\wpunit\Feed;

use ShoppingFeed\ShoppingFeedWC\ShoppingFeedHelper;

class HelperFunctionsTest extends \Codeception\TestCase\WPTestCase {

private static $upload_dir;

public static function setUpBeforeClass(): void {
self::$upload_dir = wp_upload_dir();
}

public function test_get_feed_directory() {
$this->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()
);
}
}
Loading