markup. * * WooCommerce's wc_get_template_part('content', 'product') uses locate_template() * which finds this file in the child theme before falling back to the plugin template. * Unlike wc_get_template(), wc_get_template_part() does NOT fire the * woocommerce_before_template_part / woocommerce_after_template_part hooks, * so the TemplateOverride class cannot intercept it — this bridge file is needed. * * @package WcBootstrap * @since 0.1.0 */ defined( 'ABSPATH' ) || exit; global $product; // Ensure the product is valid and visible (same guard as WooCommerce's default template). if ( ! is_a( $product, WC_Product::class ) || ! $product->is_visible() ) { return; } if ( class_exists( '\WPBootstrap\Twig\TwigService' ) ) { $twig = \WPBootstrap\Twig\TwigService::getInstance(); echo $twig->render( 'content-product.html.twig', [] ); } else { // Fallback: include WooCommerce's default template directly. include WC()->plugin_path() . '/templates/content-product.php'; }