PHP
<?php
/*
Plugin Name: Hardcopy Ticket
*/
add_action( 'woocommerce_after_checkout_billing_form', 'add_box_option_to_checkout' );
function add_box_option_to_checkout( $checkout ) {
foreach( WC()->cart->get_cart() as $cart_item_key => $values ) {
$cart_product = $values['data'];
$cart_ids[] = $cart_product->id;
}
foreach( $cart_ids as $id ) {
$products_categories = get_the_terms( $id, 'product_cat' );
// Loop through each product category and add it to our $cart_categories array
foreach ( $products_categories as $products_category ) {
$cart_categories[] = $products_category->slug;
}
}
if (in_array("events", $cart_categories)) { // HIER SLUG DER KATEGORIE EINGEBEN
echo '<div id="message_fields">';
woocommerce_form_field( 'hardcopy', array(
'type' => 'checkbox',
'class' => array('hardcopy form-row-wide'),
'label' => __('Hardcopy-Ticket: 3.90 EUR'),
'placeholder' => __(''),
), $checkout->get_value( 'hardcopy' ));
echo '</div>';
}
}
add_action( 'wp_footer', 'woocommerce_hardcopy' );
function woocommerce_hardcopy() {
if (is_checkout()) {
?>
<script type="text/javascript">
jQuery( document ).ready(function( $ ) {
$('#hardcopy').click(function(){
jQuery('body').trigger('update_checkout');
});
});
</script>
<?php
}
}
add_action( 'woocommerce_cart_calculate_fees', 'woo_add_cart_fee' );
function woo_add_cart_fee( $cart ){
if ( ! $_POST || ( is_admin() && ! is_ajax() ) ) {
return;
}
if ( isset( $_POST['post_data'] ) ) {
parse_str( $_POST['post_data'], $post_data );
} else {
$post_data = $_POST;
}
if (isset($post_data['hardcopy'])) {
$extracost = 3.9; //PREIS
WC()->cart->add_fee( 'Hardcopy-Ticket:', $extracost );
}
}
?>
Alles anzeigen
Bei mir funktioniert das lokal so. Die Checkbox wird nur noch angezeigt, wenn Produkt aus Kat "events" im Warenkorb.