is_activated() ) { return false; } // Problem: REST_REQUEST constant is false during Store API requests, so we check the rest_route parameter instead. $request_uri = defender_get_data_from_request( 'REQUEST_URI', 's' ); if ( '' !== $request_uri && str_contains( $request_uri, 'rest_route=/wc/store/v1/checkout' ) ) { return true; } $post_data = defender_get_data_from_request( null, 'p' ); if ( 0 === count( $post_data ) ) { return false; } if ( isset( $post_data['woocommerce-login-nonce'] ) || isset( $post_data['woocommerce-register-nonce'] ) || isset( $post_data['woocommerce_checkout_login'] ) || ( isset( $post_data['login'] ) && is_checkout() ) || ( isset( $post_data['register'] ) && isset( $post_data['email'] ) ) || isset( $post_data['wc_reset_password'] ) ) { return true; } $referer = wp_get_referer(); if ( $referer && function_exists( 'wc_get_page_id' ) ) { $my_account_page_id = wc_get_page_id( 'myaccount' ); if ( $my_account_page_id > 0 ) { $my_account_url = get_permalink( $my_account_page_id ); return str_starts_with( $referer, $my_account_url ); } } return false; } /** * Retrieves an array of WooCommerce forms with their respective translations. * * @return array An associative array where the keys are the form identifiers and the values are the translated * form names. */ public static function get_forms(): array { return array( self::WOO_LOGIN_FORM => esc_html__( 'Login', 'defender-security' ), self::WOO_LOST_PASSWORD_FORM => esc_html__( 'Lost Password', 'defender-security' ), self::WOO_REGISTER_FORM => esc_html__( 'Registration', 'defender-security' ), self::WOO_CHECKOUT_FORM => esc_html__( 'Checkout', 'defender-security' ), ); } /** * Detects if current request originates from WooCommerce code path. * * @return bool */ public function is_woocommerce_page(): bool { if ( ! $this->is_activated() ) { return false; } $traces = debug_backtrace(); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_debug_backtrace foreach ( $traces as $trace ) { if ( isset( $trace['file'] ) && str_contains( $trace['file'], 'woocommerce' ) ) { return true; } } return false; } }