Support » Plugin: WooCommerce » a logical error mistake in my code

  • Below is the code Iam using to display 3 custom fields like ‘keywords’, ‘keyword density’ , ‘my field’ and also to send an email along with values for these mentioned custom fields..

    Anyway, right now I do not have any problem in getting mail. BUT my problem is related to some logic (or condition) that I used below..

    **here is the code:**

         * Add the field to the checkout
        add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
        function my_custom_checkout_field( $checkout ) {
        global $woocommerce;
        $found = false;
        //check if product already in cart
        	if ( sizeof( $woocommerce->cart->get_cart() ) > 0 ) {
        		foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {				
        				$_product = $values['data'];
        if ( $_product->id == 209) { // 209 is product id
        	echo '<div id="my_custom_checkout_field"><h3>'.__('My Field').'</h3>';
        	woocommerce_form_field( 'my_field_name', array(
        		'type' 			=> 'checkbox',
        		'class' 		=> array('my-field-class form-row-wide'),
        		'label' 		=> __('Fill in this field'),
        		'placeholder' 	=> __('Enter a number'),
        		), $checkout->get_value( 'my_field_name' ));
        	echo '</div>';
        if ( $_product->id == 221) {   // 221 is product id
            woocommerce_form_field( 'Keywords', array(
                'type'          => 'text',
                'required'  => true,
                'class'         => array('my-field-class form-row-wide'),
                'label'         => __('Enter Keywords'),
                'placeholder'       => __('Please enter keywords'),
                ), $checkout->get_value( 'Keywords' ));
          woocommerce_form_field( 'Keyword_Density', array(
                'type'          => 'text',
                'required'  => false,
                'class'         => array('my-field-class form-row-wide'),
                'label'         => __('Enter Keyword Density'),
                'placeholder'       => __('Please enter keyword Density'),
                ), $checkout->get_value( 'Keyword_Density' ));
         * Update the order meta with field value
        add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
        function my_custom_checkout_field_update_order_meta( $order_id ) {
        	if ($_POST['my_field_name']) update_post_meta( $order_id, 'My Field', esc_attr($_POST['my_field_name']));
                if ($_POST['Keywords']) update_post_meta( $order_id, 'Keywords', esc_attr($_POST['Keywords']));
               if ($_POST['Keyword_Density']) update_post_meta( $order_id, 'Keyword_Density', esc_attr($_POST['Keyword_Density']));
         * Add the field to order emails
        add_filter('woocommerce_email_order_meta_keys', 'my_custom_checkout_field_order_meta_keys');
        function my_custom_checkout_field_order_meta_keys( $keys ) {
        	$keys[] = 'My Field';
        	$keys[] = 'Keywords';
                $keys[] = 'Keyword_Density';
        	return $keys;
         * Process the checkout
        add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
        function my_custom_checkout_field_process() {
            global $woocommerce;
            // Check if set, if its not set add an error.
            if (!$_POST['Keywords'])
                 $woocommerce->add_error( __('Please enter keywords...') );


    PLEASE KINDLY SOMEONE LOOK INTO THIS AND SOLVE MY PROBLEM! (I tried my best to explain clearly!)

    EDITED: *in THIS LINK:* when i selected 2 varieties of same product, then its displaying me 2 keyword fields and 2 keyword_density fields, which I shouldnt get like that.. I should display only 1 keyword field and 1 keyword density field (no matters how many varities i chose for same prdocut).. check this: so any idea pls..? (if i rectify this, my problem would be solved)

  • The topic ‘a logical error mistake in my code’ is closed to new replies.