root_rendered || ! $this->should_render_root() ) { return; } $this->root_rendered = true; echo '
'; } public function render_mount_root_fallback(): void { $this->render_mount_root(); } public function print_runtime_settings(): void { if ( ! AddToCartContext::should_render_runtime() ) { return; } $payload = [ 'enabled' => true, 'ajaxUrl' => \WC_AJAX::get_endpoint( 'ipscmi_order_cart_add_to_cart' ), 'pageSurface' => SidecartExpressSurfacePolicy::current_surface(), 'loopButtonSelector' => 'a.add_to_cart_button', 'singleFormSelector' => 'form.cart', 'noticeWrapperClass' => 'ipscmi-order-cart-sidecart-inline-notices', 'handledQueryArgs' => AddToCartContext::get_handled_query_args(), 'cartgatePrecheck' => CartgatePrecheckRuntimeBuilder::build_payload(), ]; wp_add_inline_script( 'ipscmi-order-cart-front-react', 'window.ipscmiOrderCartAddToCartReactData=' . wp_json_encode( $payload, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT ) . ';', 'before' ); } private function should_render_root(): bool { return AddToCartContext::should_render_runtime(); } private function is_enabled(): bool { return AddToCartContext::is_enabled(); } public function prevent_cart_redirect( $value ) { if ( ! AddToCartContext::should_prevent_native_redirects() ) { return $value; } return 'no'; } public function prevent_add_to_cart_redirect( $redirect_url ) { if ( ! AddToCartContext::should_prevent_native_redirects() ) { return $redirect_url; } if ( isset( $_POST['pi_quick_checkout'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing return $redirect_url; } return false; } /** * @param array $variation * @param array $cart_item_data */ public function maybe_block_duplicate_request( bool $passed, int $product_id, int $quantity, int $variation_id = 0, array $variation = [], array $cart_item_data = [] ): bool { if ( ! $passed || ! $this->is_enabled() || AddToCartContext::is_sidecart_ajax_request() ) { return $passed; } $order_bump_id = isset( $cart_item_data['ips_order_bump_id'] ) ? absint( $cart_item_data['ips_order_bump_id'] ) : ( is_scalar( $_REQUEST['ips_order_bump_id'] ?? null ) ? absint( wp_unslash( $_REQUEST['ips_order_bump_id'] ) ) : 0 ); if ( ! AddToCartRequestFingerprint::has_recent_match( $product_id, $quantity, $variation_id, $variation, $order_bump_id ) ) { return $passed; } add_filter( 'wc_add_to_cart_message_html', '__return_empty_string', 1000 ); return false; } public function maybe_redirect_duplicate_get_request(): void { if ( ! $this->is_enabled() || ! AddToCartContext::is_get_add_to_cart_request() ) { return; } if ( ! AddToCartRequestFingerprint::has_recent_fingerprint( AddToCartRequestFingerprint::build_from_request() ) ) { return; } $redirect_url = AddToCartContext::get_clean_request_url(); if ( '' === $redirect_url || headers_sent() ) { return; } wp_safe_redirect( $redirect_url ); exit; } }