Apa itu template overriding ? template overriding adalah proses menggantikan template woocommerce yang asli dengan custom template (code) yang kita buat. hal ini hanya dilakukan jika hook atau filter sudah tidak memungkinkan untuk menghandle kebutuhan yang ada
Contoh kasus studi : client menginginkan add to cart yang ada di single product menggunakan ajax
dari contoh diatas kita tidak bisa menggunakan hook untuk mengganti button yang ada di halaman single proaduct terutama button untuk sing product variable.
Langkah langkah override template
Membuat folder woocommerce di root tema
copy folder dan file yang kita butuhkan dari direktori plugins > woocommerce > templates
dalam kasus ini file yang di kopi ada di dalam folder single-product > add-to-cart. copy seluruh file yang dibutuhkan. biasnya hanya simple dan variation-add-to-cart button
Hasil di tema akan terlihat seperti ini, jangan lupa untuk mengkopi foldernya juga
taruh custom code yang telah kita buat di dalam file simple dan variation yang ada di template
Code sebelum dioverride :
Simple.php
<?php/** * Simple product add to cart * * This template can be overridden by copying it to yourtheme/woocommerce/single-product/add-to-cart/simple.php. * * HOWEVER, on occasion WooCommerce will need to update template files and you * (the theme developer) will need to copy the new files to your theme to * maintain compatibility. We try to do this as little as possible, but it does * happen. When this occurs the version of the template file will be bumped and * the readme will list any important changes. * * @see https://docs.woocommerce.com/document/template-structure/ * @package WooCommerce\Templates * @version 3.4.0 */defined('ABSPATH')||exit;global $product;if ( ! $product->is_purchasable() ) {return;}echowc_get_stock_html( $product ); // WPCS: XSS ok.if ( $product->is_in_stock() ) :?><?php do_action('woocommerce_before_add_to_cart_form'); ?><form class="cart" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data'><?php do_action('woocommerce_before_add_to_cart_button'); ?><?phpdo_action('woocommerce_before_add_to_cart_quantity');woocommerce_quantity_input( array('min_value'=> apply_filters('woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),'max_value'=> apply_filters('woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ),'input_value'=> isset( $_POST['quantity'] )? wc_stock_amount( wp_unslash( $_POST['quantity'] )): $product->get_min_purchase_quantity(),// WPCS: CSRF ok, input var ok. ));do_action('woocommerce_after_add_to_cart_quantity');?><button type="submit" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>"class="single_add_to_cart_button button alt"><?php echoesc_html( $product->single_add_to_cart_text()); ?></button><?php do_action('woocommerce_after_add_to_cart_button'); ?></form><?php do_action('woocommerce_after_add_to_cart_form'); ?><?php endif; ?>
<?php/** * Simple product add to cart * * This template can be overridden by copying it to yourtheme/woocommerce/single-product/add-to-cart/simple.php. * * HOWEVER, on occasion WooCommerce will need to update template files and you * (the theme developer) will need to copy the new files to your theme to * maintain compatibility. We try to do this as little as possible, but it does * happen. When this occurs the version of the template file will be bumped and * the readme will list any important changes. * * @see https://docs.woocommerce.com/document/template-structure/ * @package WooCommerce\Templates * @version 3.4.0 */defined('ABSPATH')||exit;global $product;if ( ! $product->is_purchasable() ) {return;}echowc_get_stock_html( $product ); // WPCS: XSS ok.if ( $product->is_in_stock() ) :?><?php do_action('woocommerce_before_add_to_cart_form'); ?><form class="cart" action="<?php echo esc_url( apply_filters( 'woocommerce_add_to_cart_form_action', $product->get_permalink() ) ); ?>" method="post" enctype='multipart/form-data'><?php do_action('woocommerce_before_add_to_cart_button'); ?><?phpdo_action('woocommerce_before_add_to_cart_quantity');woocommerce_quantity_input( array('min_value'=> apply_filters('woocommerce_quantity_input_min', $product->get_min_purchase_quantity(), $product ),'max_value'=> apply_filters('woocommerce_quantity_input_max', $product->get_max_purchase_quantity(), $product ),'input_value'=> isset( $_POST['quantity'] )? wc_stock_amount( wp_unslash( $_POST['quantity'] )): $product->get_min_purchase_quantity(),// WPCS: CSRF ok, input var ok. ));do_action('woocommerce_after_add_to_cart_quantity');?><!--<button type="submit" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>"class="single_add_to_cart_button button alt ajax_add_to_cart"><?php echoesc_html( $product->single_add_to_cart_text()); ?></button>--><a href="<?php echo $product->add_to_cart_url() ?>" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>"class="single_add_to_cart_button button alt ajax_add_to_cart add_to_cart_button disabled" data-product_id="<?php echo get_the_ID(); ?>" data-product_sku="<?php echo esc_attr($sku) ?>" aria-label="Add ā<?php the_title_attribute() ?>ā to your cart" data-quantity="1"><?php echoesc_html( $product->single_add_to_cart_text()); ?></a><?php do_action('woocommerce_after_add_to_cart_button'); ?><!--<button type="submit" name="add-to-cart" value="<?php echo esc_attr( $product->get_id() ); ?>"class="single_add_to_cart_button button alt ajax_add_to_cart"><?php echoesc_html( $product->single_add_to_cart_text()); ?></button>--></form><?php do_action('woocommerce_after_add_to_cart_form'); ?><?php endif; ?>
Setelah code yang dioverride add to cart flow akan menggunakan ajax. sesuai dengan kebutuhan klien
Kesimpulan
template overriding akan sangat berguna jika kita membuat custom function yang cukup kompleks. pastikan hanya melakukan template overriding jika sudah tidak bisa menggunakan hook. untuk dokumentasi yang lebih lengkap kunjungi disini