WooCommerce:将类别复选框更改为下拉菜单

时间:2016-04-14 12:50:38

标签: php jquery wordpress woocommerce

请帮帮我!

我需要在WooCommerce添加产品页面上更改类别复选框以下拉列表。用户应该只能选择一个类别。

当用户选择类别时,所选类别的所有子类别都应在下一个下拉列表中。用户应该只能选择一个子类别。

然后我需要将这两个下拉列表放在“产品数据”下拉列表中。

  1. 如何删除“产品类别”块?
  2. 如何将类别下拉列表添加到“产品数据”块?
  3. 如何根据第一个下拉列表中选择的类别将子类别放在第二个下拉列表中?
  4. Categories Image

1 个答案:

答案 0 :(得分:0)

  1. 如何删除“产品类别”块?

    function remove_custom_meta_box() {
        remove_meta_box('{taxonomy-name}div', 'product', 'side');
    }
    add_action('admin_menu', 'remove_custom_meta_box');
    
  2. 如何将类别下拉列表添加到“产品数据”块?

  3. 如何根据第一个下拉列表中选择的类别将子类别放在第二个下拉列表中?

    function categories_dropdown_metabox() {
        add_meta_box('custom-taxonomy-dropdown', 'Product Category', 'taxonomy_dropdowns_box', 'product', 'side', 'high');
    }
    
    function taxonomy_dropdowns_box($post) {
        $terms        = get_terms('product_cat', 'hide_empty=0');
        $object_terms = wp_get_object_terms($post->ID, 'product_cat', array('fields'=>'ids'));
    
        <script type="text/javascript">
            jQuery(document).ready(function() {
                jQuery('#product-category').change(function() {
                    var product = jQuery('#product-category').val();
                    if ( product == '0') {
                        jQuery('#prodcatoptions').html('');
                            jQuery('#categorycontainer').css('display', 'none');
                    } else {
                        var data = {
                            'action':'get_product_categories',
                            'product':product,
                            'dropdown-nonce': jQuery('#dropdown-nonce').val()
                        };
                        jQuery.post(ajaxurl, data, function(response){
                            jQuery('#prodcatoptions').html(response);
                            jQuery('#categorycontainer').css('display', 'inline');
                        });
                    }
                });
            });
        </script>       
    
        <div> 
            <span>Category:</span>
            <select required id='product-category' name='prodcategory[]'>
                <option value=''>Choose category</option>
                <?php
                foreach ($terms as $term) {
                    if ($term->parent == 0) {
                        if (in_array($term->term_id, $object_terms)) {
                            $parent_id = $term->term_id;
                            echo "<option value='{$term->term_id}' selected='selected'>{$term->name}</option>";
                        } else {
                            echo "<option value='{$term->term_id}'>{$term->name}</option>";
                        }
                    }
                }
                ?>
            </select>
        </div>
        <div id='categorycontainer' <?php if (!isset($parent_id)) { echo "style='display: none;'"; }?> >
            <span>Subcategory:</span>
            <select required id='prodcatoptions' name='prodcategory[]'>
                <?php
                if (isset($parent_id)) {
                    $models = get_terms('product_cat', 'hide_empty=0&child_of='.$parent_id);
    
                    foreach ($models as $model) {
                        if (in_array($model->term_id, $object_terms)) {
                            echo "<option value='{$model->term_id}' selected='selected'>{$model->name}</option>";
                        } else {
                            echo "<option value='{$model->term_id}'>{$model->name}</option>";
                        }
                    }
    
                }
                ?>
            </select>
        </div>
        <?php
    }
    
    add_action('add_meta_boxes', 'categories_dropdown_metabox');
    
    function save_my_custom_taxonomy($post_id) {
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
            return;
        }    
        if (!wp_verify_nonce($_POST['dropdown-nonce'], 'custom-dropdown')) {
            return;
        }  
        $product_cat = array_map('intval', $_POST['prodcategory']);
        wp_set_object_terms($post_id, $product_cat, 'product_cat');
    }
    
    add_action('save_post','save_my_custom_taxonomy');
    
    function get_product_categories() {
        check_ajax_referer('custom-dropdown', 'dropdown-nonce');
        if (isset($_POST['product'])) {
            $models = get_terms('product_cat', 'hide_empty=0&child_of='. $_POST['product']);
            echo "<option value=''>Choose subcategory</option>";
            foreach ($models as $model) {
                echo "<option value='{$model->term_id}'>{$model->name}</option>";
            }
        }
        die();
    }
    
    add_action( 'wp_ajax_get_product_categories', 'get_product_categories' );