Automattic\WooCommerce\Internal\ProductFeed\Integrations\POSCatalog

ApiController::generate_feed │ public │ WC 1.0

Starts generating a feed.

Метод класса: ApiController{}

Хуков нет.

Возвращает

WP_REST_Response. The response object.

Использование

$ApiController = new ApiController();
$ApiController->generate_feed( $request ): WP_REST_Response;
$request(WP_REST_Request) (обязательный)
.

Код ApiController::generate_feed() WC 11.2.2

public function generate_feed( WP_REST_Request $request ): WP_REST_Response { // phpcs:ignore Squiz.Commenting.FunctionComment.IncorrectTypeHint
	$generator = $this->container->get( AsyncGenerator::class );
	try {
		$params = array();
		if ( null !== $request['_product_fields'] ) {
			$params['_product_fields'] = $request['_product_fields'];
		}
		if ( null !== $request['_variation_fields'] ) {
			$params['_variation_fields'] = $request['_variation_fields'];
		}

		$response = $request->get_param( 'force' )
			? $generator->force_regeneration( $params )
			: $generator->get_status( $params );

		// Build the download URL from the current site configuration instead of persisting it with the feed status.
		unset( $response['url'] );
		if ( AsyncGenerator::STATE_COMPLETED === ( $response['state'] ?? '' ) ) {
			$file_name = ! empty( $response['file_name'] )
				? (string) $response['file_name']
				: wp_basename( (string) ( $response['path'] ?? '' ) );

			$file_url = JsonFileFeed::get_file_url_for_identifier( $file_name );
			if ( null !== $file_url ) {
				$response['url'] = $file_url;
			}
		}

		// Use the right datetime format.
		if ( isset( $response['scheduled_at'] ) ) {
			$response['scheduled_at'] = wc_rest_prepare_date_response( $response['scheduled_at'] );
		}
		if ( isset( $response['completed_at'] ) ) {
			$response['completed_at'] = wc_rest_prepare_date_response( $response['completed_at'] );
		}

		// Remove sensitive and internal data from the response.
		unset(
			$response['action_id'],
			$response['path'],
			$response['file_name'],
			$response['page'],
			$response['entries_written'],
			$response['updated_at']
		);
	} catch ( \Exception $e ) {
		wc_get_logger()->error(
			'Feed generation failed',
			array( 'error' => $e->getMessage() )
		);
		return new WP_REST_Response(
			array(
				'success' => false,
				'message' => __( 'An error occurred while generating the feed.', 'woocommerce' ),
			),
			500
		);
	}
	return new WP_REST_Response( $response );
}