I am trying to come up with a solution to limit the stated that a product category can be shipped to. Here is what I have come up with so far.
function get_prod_cat () {
global $woocommerce;
$specialfeecat = 34; // category id for the special fee
$items = $woocommerce->cart->get_cart();
foreach ($items as $item ) {
$product = $item['data'];
$terms = get_the_terms( $product->id, 'product_cat' );
if ( $terms && ! is_wp_error( $terms ) ) :
foreach ( $terms as $term ) {
$catid = $term->term_id;
if($specialfeecat == $catid ) {
$GLOBALS['cat_id'] = $catid;
}
return $cat_id;
}
endif;
}
}
if ($cat_id == 34) {
add_filter( 'woocommerce_states', 'wc_sell_only_states' );
}
function wc_sell_only_states() {
$states['US'] = array(
'AK' => __( 'Arkansas', 'woocommerce' ),
'DC' => __( 'Washington DC', 'woocommerce' ),
'IL' => __( 'Illinois', 'woocommerce' ),
'KY' => __( 'Kentucky', 'woocommerce' ),
'MN' => __( 'Minnesota', 'woocommerce' ),
'NM' => __( 'New Mexico', 'woocommerce' ),
);
return $states;
}
I am trying to get the variable $cat_id from the first function out of it so that I can use it for the condition to limit states. Thanks in advance.
Call
add_filter( 'woocommerce_states', 'wc_sell_only_states' );
as you have done. Inside function 'wc_sell_only_states($states)' apply your logic, which you were doing inside 'get_prod_cat'. If category matched then change statesElse return states as it was.