Woocommerce Enable/Disable Shipping Methods
<?php | |
/** | |
* Shipping Methods Display | |
* | |
* In 2.1 we show methods per package. This allows for multiple methods per order if so desired. | |
* | |
* This template can be overridden by copying it to yourtheme/woocommerce/cart/cart-shipping.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/ | |
* @author WooThemes | |
* @package WooCommerce/Templates | |
* @version 3.2.0 | |
*/ | |
if ( ! defined( 'ABSPATH' ) ) { | |
exit; | |
} | |
?> | |
<?php | |
/** | |
* Function to determine if the order includes a particular product. If so then Flat_Rate will | |
* be the only avialable shipping method for all packages and if not then Flat_Rate will not be a | |
* shipping method for any packages. | |
* | |
* Filtering woocommerce_package_rates() would be preferable but the array of rates are stored as | |
* a session variable AFTER that action so if the cart contents change the aviable shipping methods | |
* and rates aren't recalculated. | |
*/ | |
function has_lamps() { | |
$has_lamps = -1; | |
// loop through the cart | |
$cart = WC() -> cart -> get_cart(); | |
foreach ( $cart as $cart_key => $cart_values ) { | |
$product = $cart_values['product_id']; | |
// If cart contains a UPS lamp set a flag. | |
if( $product === 779 ) { | |
$has_lamps = 1; | |
} | |
} | |
return $has_lamps; | |
} | |
/* | |
* Use this dump to find out the key for the shipping method you want to disable, like 'flat_rate:7', slug:id. | |
*/ | |
// echo '<pre>'; | |
// echo 'available_methods:<br/>'; | |
// print_r( $available_methods ); | |
// echo '</pre>'; | |
if ( has_lamps() === 1 ) { | |
// If the cart contains lamps then make Flat_Rate the shipping method. | |
// Make a new array and populate it with one element. | |
$flat_rate = $available_methods[ 'flat_rate:7' ]; | |
$available_methods = array(); | |
$available_methods[ 'flat_rate:7' ] = $flat_rate; | |
} else { | |
// If cart does not contain a UPS lamp, disable flat_rate shipping. | |
// Convoluted because array_splice seems to require a numeric index. | |
$needle = 'flat_rate:7'; | |
// Get the numeric key for the flat rate shipping method and delete it. | |
$rate_keys = array_keys( $available_methods ); | |
$search_key = array_search( $needle, $rate_keys, false ); | |
array_splice( $available_methods, $search_key, 1 ); | |
} | |
?> | |
<tr class="shipping"> | |
<th><?php echo wp_kses_post( $package_name ); ?></th> | |
<td data-title="<?php echo esc_attr( $package_name ); ?>"> | |
<?php if ( 1 < count( $available_methods ) ) : ?> | |
<ul id="shipping_method"> | |
<?php foreach ( $available_methods as $method ) : ?> | |
<li> | |
<?php | |
printf( '<input type="radio" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d_%2$s" value="%3$s" class="shipping_method" %4$s /> | |
<label for="shipping_method_%1$d_%2$s">%5$s</label>', | |
$index, sanitize_title( $method->id ), esc_attr( $method->id ), checked( $method->id, $chosen_method, false ), wc_cart_totals_shipping_method_label( $method ) ); | |
do_action( 'woocommerce_after_shipping_rate', $method, $index ); | |
?> | |
</li> | |
<?php endforeach; ?> | |
</ul> | |
<?php elseif ( 1 === count( $available_methods ) ) : ?> | |
<?php | |
$method = current( $available_methods ); | |
printf( '%3$s <input type="hidden" name="shipping_method[%1$d]" data-index="%1$d" id="shipping_method_%1$d" value="%2$s" class="shipping_method" />', $index, esc_attr( $method->id ), wc_cart_totals_shipping_method_label( $method ) ); | |
do_action( 'woocommerce_after_shipping_rate', $method, $index ); | |
?> | |
<?php elseif ( WC()->customer->has_calculated_shipping() ) : ?> | |
<?php | |
if ( is_cart() ) { | |
echo apply_filters( 'woocommerce_cart_no_shipping_available_html', wpautop( __( 'There are no shipping methods available. Please ensure that your address has been entered correctly, or contact us if you need any help.', 'woocommerce' ) ) ); | |
} else { | |
echo apply_filters( 'woocommerce_no_shipping_available_html', wpautop( __( 'There are no shipping methods available. Please ensure that your address has been entered correctly, or contact us if you need any help.', 'woocommerce' ) ) ); | |
} | |
?> | |
<?php elseif ( ! is_cart() ) : ?> | |
<?php echo wpautop( __( 'Enter your full address to see shipping costs.', 'woocommerce' ) ); ?> | |
<?php endif; ?> | |
<?php if ( $show_package_details ) : ?> | |
<?php echo '<p class="woocommerce-shipping-contents"><small>' . esc_html( $package_details ) . '</small></p>'; ?> | |
<?php endif; ?> | |
<?php if ( ! empty( $show_shipping_calculator ) ) : ?> | |
<?php woocommerce_shipping_calculator(); ?> | |
<?php endif; ?> | |
</td> | |
</tr> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment