Automattic\WooCommerce\Internal\ProductFeed\Feed

ResumableFeedInterface{}interfaceWC 11.0.0└─ FeedInterface

Contract for feeds that can be written across multiple processes (chunked generation).

This is deliberately kept separate from FeedInterface{}: a feed backend opts into chunked, resumable generation by implementing this interface in addition to FeedInterface. Existing FeedInterface implementations (including those provided by third-party integrations) remain valid and are unaffected, so adding this contract is a backwards-compatible change.

No Hooks.

Usage

$ResumableFeedInterface = new ResumableFeedInterface();
// use class methods

Methods

  1. public delete( string $identifier )
  2. public flush()
  3. public get_entry_count()
  4. public open( ?string $resume_identifier = null, int $entries_written = 0 )

Changelog

Since 11.0.0 Introduced.

ResumableFeedInterface{} code WC 11.0.0

interface ResumableFeedInterface extends FeedInterface {
	/**
	 * Start a feed fresh, or resume one that a previous chunk began.
	 *
	 * A feed may be written across separate processes (one Action Scheduler action per chunk), so it
	 * lives in a stable, shared location identified by the returned value. Pass that identifier back on
	 * a later chunk to keep appending to the same feed; pass nothing to begin a new one.
	 *
	 * @since 11.0.0
	 *
	 * @param string|null $resume_identifier Identifier of an existing feed to resume, or null to start fresh.
	 * @param int         $entries_written   The number of entries already written by previous chunks, so
	 *                                        separators are added correctly when resuming.
	 * @return string The identifier of the feed that was started, to be passed back by later chunks.
	 */
	public function open( ?string $resume_identifier = null, int $entries_written = 0 ): string;

	/**
	 * Persist the current chunk and release the file handle without finalizing the feed.
	 *
	 * Called at the end of a chunk that is not the last one, so a later chunk can resume.
	 *
	 * @since 11.0.0
	 *
	 * @return void
	 */
	public function flush(): void;

	/**
	 * Delete a feed (e.g. a partial feed left by an abandoned chunked generation).
	 *
	 * @since 11.0.0
	 *
	 * @param string $identifier The identifier returned by {@see open()}.
	 * @return void
	 */
	public function delete( string $identifier ): void;

	/**
	 * Get the number of entries that have been written to the feed.
	 *
	 * This reflects the rows actually written, which may be fewer than the number of products
	 * iterated, because the validator can silently drop entries before they are added.
	 *
	 * @since 11.0.0
	 *
	 * @return int Number of entries written to the feed.
	 */
	public function get_entry_count(): int;
}