Problem mit dem benutzerdefinierten Checkout-Feld für bedingte Woocommerce

Bitte helfen Sie !! Ich benötige einen meiner Woocommerce-Checkout-Felder, um nur unter der Bedingung angezeigt zu werden, dass das Produkt x (Produkt 179, wie Sie unten sehen werden) nicht im Warenkorb des Benutzers ist. So wie es ist, kann ich das richtig funktionieren mit den Standard-Woocommerce-Feldern (abgeleitet von [Rechnungsstellung], [Versand], [Konto] und [Bestellung] …) aber ich brauche das für ein benutzerdefiniertes Checkout-Feld zu arbeiten Ich habe erstellt wie hier gezeigt:

/** * Add the field to the checkout (the script) */ add_action( 'woocommerce_after_order_notes', 'the_script' ); function the_script( $checkout ) { echo '

' . __('') . '

'; woocommerce_form_field( 'user_script', array( 'type' => 'textarea', 'class' => array('extracheckoutinfo form-row-wide'), 'label' => __('What is the script?'), 'placeholder' => __('You can skip this section if you added the "Create the Script" extra to your purchase'), 'required' => true ), $checkout->get_value( 'user_script' )); echo '
'; } /** * Process the checkout (the script) */ add_action('woocommerce_checkout_process', 'the_script_field_process'); function the_script_field_process() { // Check if set, if its not set add an error. if ( ! $_POST['user_script'] ) wc_add_notice( __( 'Providethe script you want to use.' ), 'error' ); } /** * Update the order meta with field value (the script) */ add_action( 'woocommerce_checkout_update_order_meta', 'the_script_field_update_order_meta' ); function call_script_field_update_order_meta( $order_id ) { if ( ! empty( $_POST['user_script'] ) ) { update_post_meta( $order_id, 'The Script', sanitize_text_field( $_POST['user_script'] ) ); } } /** * Display field value on the order edit page (the script) */ add_action( 'woocommerce_admin_order_data_after_billing_address', 'the_script_field_display_admin_order_meta', 10, 1 ); function the_script_field_display_admin_order_meta($order){ echo '

'.__('The Script').': ' . get_post_meta( $order->id, 'The Script', true ) . '

'; } /** * Check if a specific product ID is in the cart */ function wc_ninja_product_is_in_the_cart() { // Add your special product IDs here $ids = array( '179' );; // Products currently in the cart $cart_ids = array(); // Find each product in the cart and add it to the $cart_ids array foreach( WC()->cart->get_cart() as $cart_item_key => $values ) { $cart_product = $values['data']; $cart_ids[] = $cart_product->id; } // If one of the special products are in the cart, return true. if ( ! empty( array_intersect( $ids, $cart_ids ) ) ) { return true; } else { return false; } } /** * Conditionally remove a checkout field based on products in the cart */ function wc_ninja_remove_checkout_field( $fields ) { if ( wc_ninja_product_is_in_the_cart() ) { unset( $fields['billing']['billing_first_name'] ); } return $fields; } add_filter( 'woocommerce_checkout_fields' , 'wc_ninja_remove_checkout_field' );

Also im Grunde denke ich, ich muss unset( $fields['billing']['billing_first_name'] ); ändern unset( $fields['billing']['billing_first_name'] ); zu etwas wie unset( $fields['the_script']['user_script'] );

aber natürlich funktioniert es nicht so. Ich kann nicht herausfinden, wie ich auf das benutzerdefinierte Feld zugreifen kann, das ich dafür erstellt habe. Ich habe stundenlang ohne Glück versucht !!! Jemand bitte helfen

Solutions Collecting From Web of "Problem mit dem benutzerdefinierten Checkout-Feld für bedingte Woocommerce"

Ok, ich habe es herausgefunden (endlich)

Anstatt den obigen Code zu verwenden, um ein neues benutzerdefiniertes Feld hinzuzufügen, habe ich es folgendermaßen geändert:

 add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' ); function custom_override_checkout_fields ( $fields ) { $fields['order']['the_script'] = array ( woocommerce_form_field ( 'the_script', array( 'type' => 'textarea', 'class' => array('extracheckoutinfo form-row-wide'), 'label' => __('What is the script?'), 'placeholder' => __('You can skin this section if you added the "script" extra to your purchase'), 'required' => true ); return $fields } 

Damit kann ich jetzt mein benutzerdefiniertes Feld wie folgt ausrichten:

 unset ($fields['order']['the_script'] );