Commit 969d0766637 for woocommerce

commit 969d07666372bcd6054e72fcc6cc7f5f8de82ed7
Author: SH Sajal Chowdhury <72102985+shsajalchowdhury@users.noreply.github.com>
Date:   Sun Jul 12 00:16:02 2026 +0600

    Add filter to disable webhook delivery logging (#64372)

    * Add filter to disable webhook delivery logging

    Adds woocommerce_webhook_enable_delivery_log filter to the log_delivery method,
    allowing developers to disable delivery log file creation while preserving
    failure tracking functionality.

    Usage: add_filter( 'woocommerce_webhook_enable_delivery_log', '__return_false' );

    Fixes #33432

    * Add changelog entry

    * Bump @since to 11.1.0 and add test for the webhook delivery log filter

    * Fix phpcs violations in webhook delivery log test

    ---------

    Co-authored-by: Brandon Kraft <public@brandonkraft.com>

diff --git a/plugins/woocommerce/changelog/pr-64372 b/plugins/woocommerce/changelog/pr-64372
new file mode 100644
index 00000000000..18c8d1612a1
--- /dev/null
+++ b/plugins/woocommerce/changelog/pr-64372
@@ -0,0 +1,4 @@
+Significance: patch
+Type: add
+
+Add woocommerce_webhook_enable_delivery_log filter to disable delivery logs.
diff --git a/plugins/woocommerce/includes/class-wc-webhook.php b/plugins/woocommerce/includes/class-wc-webhook.php
index dbff8f68dbd..f8f26b50050 100644
--- a/plugins/woocommerce/includes/class-wc-webhook.php
+++ b/plugins/woocommerce/includes/class-wc-webhook.php
@@ -547,12 +547,23 @@ class WC_Webhook extends WC_Legacy_Webhook {
 			$message['Webhook Delivery']['Response']['Body'] = 'Webhook body is not logged unless WP_DEBUG mode is turned on. This is to avoid the storing of personal data in the logs.';
 		}

-		$logger->info(
-			wc_print_r( $message, true ),
-			array(
-				'source' => 'webhooks-delivery',
-			)
-		);
+		/**
+		 * Filter to disable webhook delivery logging.
+		 *
+		 * @since 11.1.0
+		 * @param bool $enable_logging Whether to log the delivery. Default true.
+		 * @param int  $webhook_id     The webhook ID.
+		 */
+		$enable_logging = apply_filters( 'woocommerce_webhook_enable_delivery_log', true, $this->get_id() );
+
+		if ( $enable_logging ) {
+			$logger->info(
+				wc_print_r( $message, true ),
+				array(
+					'source' => 'webhooks-delivery',
+				)
+			);
+		}

 		// Track failures.
 		// Check for a success, which is a 2xx, 301 or 302 Response Code.
diff --git a/plugins/woocommerce/tests/php/includes/class-wc-webhook-tests.php b/plugins/woocommerce/tests/php/includes/class-wc-webhook-tests.php
index f1f51120993..6955c52fcec 100644
--- a/plugins/woocommerce/tests/php/includes/class-wc-webhook-tests.php
+++ b/plugins/woocommerce/tests/php/includes/class-wc-webhook-tests.php
@@ -112,4 +112,82 @@ class WC_Webhook_Test extends WC_Unit_Test_Case {
 		$this->assertSame( 999, $webhook2->get_user_id() );
 	}

+	/**
+	 * @testDox The woocommerce_webhook_enable_delivery_log filter toggles delivery logging without affecting failure tracking.
+	 */
+	public function test_delivery_logging_respects_enable_delivery_log_filter() {
+		// Ensure logging is enabled and every level is handled so the delivery log write is observable.
+		update_option( 'woocommerce_logs_logging_enabled', 'yes' );
+		update_option( 'woocommerce_logs_level_threshold', 'none' );
+
+		$logged  = 0;
+		$log_spy = function ( $message, $level, $context ) use ( &$logged ) {
+			if ( isset( $context['source'] ) && 'webhooks-delivery' === $context['source'] ) {
+				++$logged;
+			}
+			return $message;
+		};
+		add_filter( 'woocommerce_logger_log_message', $log_spy, 10, 3 );
+
+		$webhook = new WC_Webhook();
+		$webhook->set_status( 'active' );
+		$webhook->set_topic( 'order.created' );
+		$webhook->set_delivery_url( 'https://example.com/webhook' );
+		$webhook->set_user_id( 1 );
+		$webhook->save();
+
+		$request = array(
+			'method'     => 'POST',
+			'user-agent' => 'WooCommerce',
+			'headers'    => array(),
+			'body'       => '{}',
+		);
+		$success = array(
+			'response' => array(
+				'code'    => 200,
+				'message' => 'OK',
+			),
+			'headers'  => array(),
+			'body'     => '',
+		);
+		$failure = array(
+			'response' => array(
+				'code'    => 500,
+				'message' => 'Internal Server Error',
+			),
+			'headers'  => array(),
+			'body'     => '',
+		);
+
+		// By default the delivery is logged, and the filter receives the webhook ID.
+		$received_id = null;
+		$id_spy      = function ( $enable, $webhook_id ) use ( &$received_id ) {
+			$received_id = $webhook_id;
+			return $enable;
+		};
+		add_filter( 'woocommerce_webhook_enable_delivery_log', $id_spy, 10, 2 );
+		$webhook->log_delivery( 'delivery-default', $request, $success, 0.1 );
+		remove_filter( 'woocommerce_webhook_enable_delivery_log', $id_spy, 10 );
+
+		$this->assertSame( $webhook->get_id(), $received_id, 'The filter should receive the webhook ID.' );
+		$this->assertGreaterThan( 0, $logged, 'The delivery should be logged by default.' );
+
+		// When the filter returns false the log is suppressed, but failure tracking still runs.
+		$logged = 0;
+		$webhook->set_failure_count( 0 );
+		$webhook->save();
+		add_filter( 'woocommerce_webhook_enable_delivery_log', '__return_false' );
+		$webhook->log_delivery( 'delivery-disabled', $request, $failure, 0.1 );
+		remove_filter( 'woocommerce_webhook_enable_delivery_log', '__return_false' );
+
+		$this->assertSame( 0, $logged, 'The delivery log should be suppressed when the filter returns false.' );
+		$this->assertGreaterThan(
+			0,
+			wc_get_webhook( $webhook->get_id() )->get_failure_count(),
+			'Failure tracking must still run when delivery logging is disabled.'
+		);
+
+		remove_filter( 'woocommerce_logger_log_message', $log_spy, 10 );
+	}
+
 }