Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

add product search field in woo-commerce product page

right now i am using below code

// Display Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
 function woo_add_custom_general_fields() {


  global $woocommerce, $post;


  echo '<div class="options_group">';


  // Custom fields will be created here...

// Product Select
?>
<p class="form-field product_field_type">
<label for="product_field_type"><?php _e( 'Product Select', 'woocommerce' ); ?></label>
<select style="width:100%" id="product_field_type" name="product_field_type[]" class="ajax_chosen_select_products" multiple="multiple" data-placeholder="<?php _e( 'Search for a product&hellip;', 'woocommerce' ); ?>">
    <?php
        $product_field_type_ids = get_post_meta( $post->ID, '_product_field_type_ids', true );
        $product_ids = ! empty( $product_field_type_ids ) ? array_map( 'absint',  $product_field_type_ids ) : null;
        if ( $product_ids ) {
            foreach ( $product_ids as $product_id ) {

                $product      = get_product( $product_id );
                $product_name = woocommerce_get_formatted_product_name( $product );

                echo '<option value="' . esc_attr( $product_id ) . '" selected="selected">' . esc_html( $product_name ) . '</option>';
            }
        }
    ?>
</select> <img class="help_tip" data-tip='<?php _e( 'Your description here', 'woocommerce' ) ?>' src="<?php echo $woocommerce->plugin_url(); ?>/assets/images/help.png" height="16" width="16" />
</p>
<?php

  echo '</div>';

}

which shows below product field but not working properly

enter image description here

but i wants product search like below pic

enter image description here

I am using below website for code

http://www.remicorson.com/mastering-woocommerce-products-custom-fields/

like image 235
Raman Singh Avatar asked Mar 15 '23 16:03

Raman Singh


1 Answers

I was trying to figure out the same problem for a client of mine recently. I had originally used that same tutorial to add a custom product search input field for him on the back end and it broke when we got him updated to WooCommerce 2.5+.

To add the product search widget/field to the backend:

?>

    <p class="form-field product_field_type">
    <label for="product_field_type_ids"><?php _e( 'Component Products:', 'woocommerce' ); ?></label>

        <input type="hidden" class="wc-product-search" style="width: 50%;" id="product_field_type_ids" name="product_field_type_ids" data-placeholder="<?php esc_attr_e( 'Search for a product&hellip;', 'woocommerce' ); ?>" data-action="woocommerce_json_search_products" data-multiple="true" data-exclude="<?php echo intval( $post->ID ); ?>" data-selected="<?php
                        $product_ids = array_filter( array_map( 'absint', (array) get_post_meta( $post->ID, '_product_field_type_ids', true ) ) );
                        $json_ids    = array();

                        foreach ( $product_ids as $product_id ) {
                            $product = wc_get_product( $product_id );
                            if ( is_object( $product ) ) {
                                $json_ids[ $product_id ] = wp_kses_post( html_entity_decode( $product->get_formatted_name(), ENT_QUOTES, get_bloginfo( 'charset' ) ) );
                            }
                        }

                        echo esc_attr( json_encode( $json_ids ) );
                    ?>" value="<?php echo implode( ',', array_keys( $json_ids ) ); ?>" /> <?php echo wc_help_tip( __( 'Select component parts to display on the product page.', 'woocommerce' ) ); ?>
    </p>

    <?php

To Save: (saved in the same id int array format as the existing field so you don't have to start from scratch with your existing database entries)

$my_product_ids    = isset( $_POST['product_field_type_ids'] ) ? array_filter( array_map( 'intval', explode( ',', $_POST['product_field_type_ids'] ) ) ) : array();
    update_post_meta( $post_id, '_product_field_type_ids', $my_product_ids  );

To display on the front end: (same as before)

global $post;
$items = get_post_meta($post->ID, '_product_field_type_ids', true);
if (! empty($items)) {
        foreach ( $items as $product_id ) {
            echo '<div class="productLink"><a href="'.get_permalink($product_id).'">'.get_the_title($product_id).'</a></div>';
        }  
    }
like image 131
FascistDonut Avatar answered Mar 23 '23 14:03

FascistDonut