Automattic\WooCommerce\Internal\Logging
RemoteLogger::is_third_party_error
Check if the error exclusively contains third-party stack frames for fatal-errors source context.
Method of the class: RemoteLogger{}
Hooks from the method
Returns
true|false.
Usage
// protected - for code of main (parent) or child class $result = $this->is_third_party_error( $message, $context ): bool;
- $message(string) (required)
- The error message.
- $context(array) (required)
- The error context.
RemoteLogger::is_third_party_error() RemoteLogger::is third party error code WC 10.6.2
protected function is_third_party_error( string $message, array $context ): bool {
// Only check for fatal-errors source context.
if ( ! isset( $context['source'] ) || 'fatal-errors' !== $context['source'] ) {
return false;
}
$wc_plugin_dir = StringUtil::normalize_local_path_slashes( WC_ABSPATH );
// Check if the error message contains the WooCommerce plugin directory.
if ( str_contains( $message, $wc_plugin_dir ) ) {
return false;
}
// Without a backtrace, it's impossible to ascertain if the error is third-party. To avoid logging numerous irrelevant errors, we'll consider it a third-party error and ignore it.
if ( isset( $context['backtrace'] ) && is_array( $context['backtrace'] ) ) {
$wp_includes_dir = StringUtil::normalize_local_path_slashes( ABSPATH . WPINC );
$wp_admin_dir = StringUtil::normalize_local_path_slashes( ABSPATH . 'wp-admin' );
// Find the first relevant frame that is not from WordPress core and not empty.
$relevant_frame = null;
foreach ( $context['backtrace'] as $frame ) {
if ( empty( $frame ) || ! is_string( $frame ) ) {
continue;
}
// Skip frames from WordPress core.
if ( strpos( $frame, $wp_includes_dir ) !== false || strpos( $frame, $wp_admin_dir ) !== false ) {
continue;
}
$relevant_frame = $frame;
break;
}
// Check if the relevant frame is from WooCommerce.
if ( $relevant_frame && strpos( $relevant_frame, $wc_plugin_dir ) !== false ) {
return false;
}
}
if ( ! function_exists( 'apply_filters' ) ) {
require_once ABSPATH . WPINC . '/plugin.php';
}
/**
* Filter to allow other plugins to overwrite the result of the third-party error check for remote logging.
*
* @since 9.2.0
*
* @param bool $is_third_party_error The result of the third-party error check.
* @param string $message The error message.
* @param array $context The error context.
*/
return apply_filters( 'woocommerce_remote_logging_is_third_party_error', true, $message, $context );
}