has_child() public method

Returns whether or not the product has any child product.
public has_child ( ) : boolean
return boolean
 public function is_bulk_variation_form()
 {
     global $post;
     if (!$post) {
         return false;
     }
     /** Remove validation (_bv_type) -- 03/02/2016 **/
     if (!is_product()) {
         return false;
     }
     /****/
     /** Validate if exits role -- 03/02/2016 **/
     if ($this->role_exists('wholesale_customer')) {
         if (!current_user_can('wholesale_customer')) {
             return false;
         }
     }
     // 2.0 Compat
     if (function_exists('get_product')) {
         $product = get_product($post->ID);
     } else {
         $product = new WC_Product($post->ID);
     }
     if ($product && !$product->has_child() && !$product->is_type('variable')) {
         return false;
     }
     return apply_filters('woocommerce_bv_render_form', true);
 }
 /**
  * Given a product ID & variations, find the correct variation ID to use for
  * calculation. We can't just trust input from the CLI to pass a variation_id
  * manually, otherwise you could pass the cheapest variation ID but provide
  * other information so we have to look up the variation ID.
  *
  * @since  2.5.0
  * @param  WC_Product $product Product instance
  * @return int                 Returns an ID if a valid variation was found for this product
  */
 protected function get_variation_id($product, $variations = array())
 {
     $variation_id = null;
     $variations_normalized = array();
     if ($product->is_type('variable') && $product->has_child()) {
         if (isset($variations) && is_array($variations)) {
             // start by normalizing the passed variations
             foreach ($variations as $key => $value) {
                 $key = str_replace('attribute_', '', str_replace('pa_', '', $key));
                 // from get_attributes in class-wc-api-products.php
                 $variations_normalized[$key] = strtolower($value);
             }
             // now search through each product child and see if our passed variations match anything
             foreach ($product->get_children() as $variation) {
                 $meta = array();
                 foreach (get_post_meta($variation) as $key => $value) {
                     $value = $value[0];
                     $key = str_replace('attribute_', '', str_replace('pa_', '', $key));
                     $meta[$key] = strtolower($value);
                 }
                 // if the variation array is a part of the $meta array, we found our match
                 if ($this->array_contains($variations_normalized, $meta)) {
                     $variation_id = $variation;
                     break;
                 }
             }
         }
     }
     return $variation_id;
 }
    function get_form($options)
    {
        global $woocommerce;
        $product = null;
        if (function_exists('get_product')) {
            $product = get_product($this->product_id);
        } else {
            $product = new WC_Product($this->product_id);
        }
        extract(shortcode_atts(array('display_title' => true, 'display_description' => true, 'display_inactive' => false, 'field_values' => false, 'ajax' => false, 'tabindex' => 1, 'label_subtotal' => __('Subtotal', 'wc_gf_addons'), 'label_options' => __('Options', 'wc_gf_addons'), 'label_total' => __('Total', 'wc_gf_addons'), 'disable_label_subtotal' => 'no', 'disable_label_options' => 'no', 'disable_label_total' => 'no', 'disable_calculations' => 'no'), $options));
        //Get the form meta so we can make sure the form exists.
        $form_meta = RGFormsModel::get_form_meta($this->form_id);
        if (!empty($form_meta)) {
            if (!empty($_POST)) {
                $_POST['gform_submit'] = isset($_POST['gform_old_submit']) ? $_POST['gform_old_submit'] : '';
                $_POST['gform_old_submit'] = $_POST['gform_submit'];
            }
            $form = RGForms::get_form($this->form_id, $display_title, $display_description, $display_inactive, $field_values, $ajax, $tabindex);
            unset($_POST['gform_submit']);
            $form = str_replace('</form>', '', $form);
            $form = str_replace('gform_submit', 'gform_old_submit', $form);
            $this->current_page = GFFormDisplay::get_current_page($this->form_id);
            $this->next_page = $this->current_page + 1;
            $this->previous_page = $this->current_page - 1;
            $this->next_page = $this->next_page > $this->get_max_page_number($form_meta) ? 0 : $this->next_page;
            if ($product->product_type == 'variable' || $product->product_type == 'variable-subscription') {
                echo '<div class="gform_variation_wrapper gform_wrapper single_variation_wrap">';
            } else {
                echo '<div class="gform_variation_wrapper gform_wrapper">';
            }
            if ($product->is_type('variable')) {
                //echo '<input type="hidden" name="add-to-cart" value="variation" />';
                echo '<input type="hidden" id="product_id" name="product_id" value="' . $this->product_id . '" />';
            } elseif ($product->has_child()) {
                //echo '<input type="hidden" name="add-to-cart" value="group" />';
                echo '<input type="hidden" id="product_id" name="product_id" value="' . $this->product_id . '" />';
            } else {
                //echo '<input type="hidden" name="add-to-cart" value="' . $this->product_id . '" />';
                echo '<input type="hidden" id="product_id" name="product_id" value="' . $this->product_id . '" />';
            }
            if (wc_is_21x()) {
                wp_nonce_field('add_to_cart');
            } else {
                $woocommerce->nonce_field('add_to_cart');
            }
            echo '<a id="_form_' . $this->form_id . '" href="#_form_' . $this->form_id . '" class="gform_anchor"></a>';
            echo $form;
            echo '<input type="hidden" name="gform_form_id" id="gform_form_id" value="' . $this->form_id . '" />';
            echo '<input type="hidden" id="woocommerce_get_action" value="" />';
            echo '<input type="hidden" id="woocommerce_product_base_price" value="' . $product->get_price() . '" />';
            $description_class = rgar($form_meta, "descriptionPlacement") == "above" ? "description_above" : "description_below";
            ?>

			<?php 
            $this->on_print_scripts();
            if ($disable_calculations == 'no') {
                ?>

				<div class="product_totals">
					<ul id="gform_totals_<?php 
                echo $this->form_id;
                ?>
" class="gform_fields <?php 
                echo $form_meta['labelPlacement'] . ' ' . $description_class;
                ?>
">
						<li class="gfield" <?php 
                if ($disable_label_subtotal == 'yes') {
                    echo 'style="display:none;"';
                }
                ?>
 >
							<label class="gfield_label"><?php 
                echo $label_subtotal;
                ?>
</label>
							<div class="ginput_container">
								<span class="formattedBasePrice ginput_total"></span>
							</div>
						</li>
						<li class="gfield" <?php 
                if ($disable_label_options == 'yes') {
                    echo 'style="display:none;"';
                }
                ?>
 >
							<label class="gfield_label"><?php 
                echo $label_options;
                ?>
</label>
							<div class="ginput_container">
								<span class="formattedVariationTotal ginput_total"></span>
							</div>
						</li>
						<li class="gfield" <?php 
                if ($disable_label_total == 'yes') {
                    echo 'style="display:none;"';
                }
                ?>
 >
							<label class="gfield_label"><?php 
                echo $label_total;
                ?>
</label>
							<div class="ginput_container">
								<span class="formattedTotalPrice ginput_total"></span>
							</div>
						</li>
					</ul>
				</div>
				<style>
					.single_variation .price {
						display:none !important;
					}
				</style>
			<?php 
            }
            ?>
			<style>
				.hidden-total {
					display:none !important;
				}
			</style>



			<?php 
            echo '</div>';
        }
    }
    private function create_variation_selector($condition, $name)
    {
        global $post;
        $post_id = isset($_POST['post']) ? intval($_POST['post']) : $post->ID;
        if (!$post_id) {
            return;
        }
        $product = null;
        if (function_exists('get_product')) {
            $product = get_product($post_id);
        } else {
            $product = new WC_Product($post_id);
        }
        if (!$product->has_child()) {
            return;
        }
        $all_variations = $product->get_children();
        $div_style = $condition['args']['type'] != 'variations' ? 'display:none;' : '';
        ?>

		<div>
			<label for="pricing_rule_variations_<?php 
        echo $name;
        ?>
"><?php 
        _e('Product / Variations:', 'wc_pricing');
        ?>
</label>
			<select title="<?php 
        _e('Choose what you would like to apply this pricing rule set to', 'wc_pricing');
        ?>
" class="pricing_rule_variations" id="pricing_rule_variations_<?php 
        echo $name;
        ?>
" name="pricing_rules[<?php 
        echo $name;
        ?>
][variation_rules][args][type]">
				<option <?php 
        selected('product', $condition['args']['type']);
        ?>
 value="product"><?php 
        _e('All Variations', 'wc_pricing');
        ?>
</option>
				<option <?php 
        selected('variations', $condition['args']['type']);
        ?>
 value="variations"><?php 
        _e('Specific Variations', 'wc_pricing');
        ?>
</option>
			</select>

			<div class="variations" style="<?php 
        echo $div_style;
        ?>
">
				<?php 
        sort($all_variations);
        ?>
				<?php 
        $chunks = array_chunk($all_variations, ceil(count($all_variations) / 3), true);
        ?>

				<?php 
        foreach ($chunks as $chunk) {
            ?>

					<ul class="list-column">        
						<?php 
            foreach ($chunk as $variation_id) {
                ?>
							<?php 
                $variation_object = new WC_Product_Variation($variation_id);
                ?>
							<?php 
                $variation_checked = isset($condition['args']['variations']) && is_array($condition['args']['variations']) && in_array($variation_id, $condition['args']['variations']) ? 'checked="checked"' : '';
                ?>
							<li>
								<label for="variation_<?php 
                echo $variation_id;
                ?>
_<?php 
                echo $name;
                ?>
" class="selectit">
									<input <?php 
                echo $variation_checked;
                ?>
 type="checkbox" id="variation_<?php 
                echo $variation_id;
                ?>
_<?php 
                echo $name;
                ?>
" name="pricing_rules[<?php 
                echo $name;
                ?>
][variation_rules][args][variations][]" value="<?php 
                echo $variation_id;
                ?>
" /><?php 
                _e('Variation ID:', 'wc_pricing');
                ?>
 <?php 
                echo $variation_id;
                ?>
								</label>
							</li>
						<?php 
            }
            ?>
					</ul>
				<?php 
        }
        ?>

			</div>
			<div class="clear"></div>
		</div>
		<?php 
    }
 function woocommerce_gravityform()
 {
     global $post, $woocommerce;
     include_once 'gravityforms-product-addons-form.php';
     $gravity_form_data = get_post_meta($post->ID, '_gravity_form_data', true);
     if (is_array($gravity_form_data) && $gravity_form_data['id']) {
         $product = null;
         if (function_exists('get_product')) {
             $product = get_product($post->ID);
         } else {
             $product = new WC_Product($post->ID);
         }
         $product_form = new woocommerce_gravityforms_product_form($gravity_form_data['id'], $post->ID);
         $product_form->get_form($gravity_form_data);
         $add_to_cart_value = '';
         if ($product->is_type('variable')) {
             $add_to_cart_value = 'variation';
         } elseif ($product->has_child()) {
             $add_to_cart_value = 'group';
         } else {
             $add_to_cart_value = $product->id;
         }
         if (!function_exists('get_product')) {
             //1.x only
             $woocommerce->nonce_field('add_to_cart');
             echo '<input type="hidden" name="add-to-cart" value="' . $add_to_cart_value . '" />';
         } else {
             echo '<input type="hidden" name="add-to-cart" value="' . $post->ID . '" />';
         }
     }
     echo '<div class="clear"></div>';
 }
        /**
         * Display the form associated to the product
         */
        public function display_form()
        {
            global $post, $woocommerce;
            if ($this->apply_addon()) {
                $product = null;
                if (function_exists('get_product')) {
                    $product = get_product($post->ID);
                } else {
                    $product = new WC_Product($post->ID);
                }
                $form_content = cp_calculatedfieldsf_filter_content($this->form);
                // Initialize form fields
                if (!empty($_SESSION['cp_cff_form_data']) && !empty($_REQUEST['cp_calculatedfieldsf_id']) && !empty($_REQUEST['cp_calculatedfieldsf_pform_psequence'])) {
                    global $wpdb;
                    $result = $wpdb->get_row($wpdb->prepare("SELECT form_data.paypal_post AS paypal_post FROM " . CP_CALCULATEDFIELDSF_POSTS_TABLE_NAME . " AS form_data WHERE form_data.id=%d AND form_data.formid=%d", $_SESSION['cp_cff_form_data'], $_REQUEST['cp_calculatedfieldsf_id']));
                    if (!is_null($result)) {
                        $arr = array();
                        $submitted_data = unserialize($result->paypal_post);
                        foreach ($submitted_data as $key => $val) {
                            if (preg_match('/^fieldname\\d+$/', $key)) {
                                $arr[$key . $_REQUEST['cp_calculatedfieldsf_pform_psequence']] = $val;
                            }
                        }
                        ?>
						<script>
							cpcff_default  = ( typeof cpcff_default != 'undefined' ) ? cpcff_default : {};
							cpcff_default[ 'form_structure<?php 
                        echo $_REQUEST['cp_calculatedfieldsf_pform_psequence'];
                        ?>
' ] = <?php 
                        echo json_encode($arr);
                        ?>
;
						</script>
				<?php 
                    }
                }
                unset($_SESSION['cp_cff_form_data']);
                // Remove the form tags
                if (preg_match('/<form[^>]*>/', $form_content, $match)) {
                    $form_content = str_replace($match[0], '', $form_content);
                    $form_content = preg_replace('/<\\/form>/', '', $form_content);
                }
                $tmp = get_post_meta($post->ID, 'woocommerce_cpcff_calculate_price', true);
                $request_cost = !empty($tmp) ? cp_calculatedfieldsf_get_option('request_cost', false, $this->form['id']) : false;
                echo '<div class="cpcff-woocommerce-wrapper">' . $form_content . (method_exists($woocommerce, 'nonce_field') ? $woocommerce->nonce_field('add_to_cart') : '') . '<input type="hidden" name="woocommerce_cpcff_product" value="' . $post->ID . '" />' . ($request_cost ? '<input type="hidden" name="woocommerce_cpcff_field" value="' . $request_cost . '" /><input type="hidden" name="woocommerce_cpcff_form" value="' . $this->form['id'] . '">' : '') . '</div>';
                $add_to_cart_value = '';
                if ($product->is_type('variable')) {
                    $add_to_cart_value = 'variation';
                } elseif ($product->has_child()) {
                    $add_to_cart_value = 'group';
                } else {
                    $add_to_cart_value = $product->id;
                }
                if (!function_exists('get_product')) {
                    //1.x only
                    if (method_exists($woocommerce, 'nonce_field')) {
                        $woocommerce->nonce_field('add_to_cart');
                    }
                    echo '<input type="hidden" name="add-to-cart" value="' . $add_to_cart_value . '" />';
                } else {
                    echo '<input type="hidden" name="add-to-cart" value="' . $post->ID . '" />';
                }
            }
            echo '<div class="clear"></div>';
        }