ব্যাক-এন্ডে ট্যাক্সনমি ড্রপডাউন মেটাবক্স


9

আমি কাস্টম ওয়ার্ডোনমি ডেকে Brandsতৈরি করেছি এবং এটিকে শ্রেণিবিন্যাসিক করে তুলেছি যাতে আমি সেখানে গাড়ি ব্র্যান্ড এবং মডেল যুক্ত করতে পারি এবং তাদের সম্পর্কগুলি এভাবে রাখতে পারি:

  • হাঁটুজল
    • বন্য ঘোড়াবিশেষ
    • Mondeo
    • কেন্দ্রবিন্দু

সমস্যাটি হ'ল, এই তালিকাটি বেশ দীর্ঘ হতে পারে এবং প্রতি পোস্টে কেবল একটি ব্র্যান্ড এবং একটি মডেলের প্রয়োজন হয়, তাই চেকবক্সগুলি বিভ্রান্তিকর।

আমি সেই মেটাবক্সকে দুটি করে বিভক্ত করার কথা ভাবছি (একটি ব্র্যান্ডের জন্য এবং একটি মডেলের জন্য) এবং সেগুলি ড্রপডাউন করে দেবো। সুতরাং যখন প্রথম ড্রপডাউনে ব্র্যান্ড নির্বাচন করা হয়, দ্বিতীয় ড্রপডাউনটি কেবলমাত্র সেই ব্র্যান্ডের সাথে সম্পর্কিত মডেলগুলি দেখায়। তবে এটি কীভাবে কোড করবেন তা আমার কোনও ধারণা নেই। কেউ আমাকে একটি উদাহরণ দেখাতে পারে?

উত্তর:


10

এখানে একটি উদাহরণ। আমি আরও জেনেরিক কোড সহ একটি গিস্ট তৈরি করেছি ।

add_action('add_meta_boxes', 'my_custom_metabox');
function my_custom_metabox() {
    add_meta_box('custom-taxonomy-dropdown','Brands','taxonomy_dropdowns_box','post','side','high');
}

function taxonomy_dropdowns_box( $post ) {
    wp_nonce_field('custom-dropdown', 'dropdown-nonce');
    $terms = get_terms( 'brands', 'hide_empty=0');
    $object_terms = wp_get_object_terms( $post->ID, 'brands', array('fields'=>'ids'));

    // you can move the below java script to admin_head
?>
    <script type="text/javascript">
        jQuery(document).ready(function() {
                jQuery('#custombrandoptions').change(function() {
                    var custombrand = jQuery('#custombrandoptions').val();
                    if ( custombrand == '0') {
                        jQuery('#custommodeloptions').html('');
                            jQuery('#modelcontainer').css('display', 'none');
                    } else {
                        var data = {
                            'action':'get_brand_models',
                            'custombrand':custombrand,
                            'dropdown-nonce': jQuery('#dropdown-nonce').val()
                        };
                        jQuery.post(ajaxurl, data, function(response){
                            jQuery('#custommodeloptions').html(response);
                            jQuery('#modelcontainer').css('display', 'inline');
                        });
                    }
                });
        });
    </script>
    <?php
    echo "Brand:";
    echo "<select id='custombrandoptions' name='custombrands[]'>";
    echo "<option value='0'>None</option>";
    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>";
            }
        }
    }
    echo "</select><br />";
    echo "<div id='modelcontainer'";
    if ( !isset( $parent_id)) echo " style='display: none;'";
    echo ">";
    echo "Models:";
    echo "<select id='custommodeloptions' name='custombrands[]'>";
    if ( isset( $parent_id)) {
        $models = get_terms( 'brands', '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>";
            }
        }
    }
    echo "</select>";
    echo "</div>";
}

add_action('save_post','save_my_custom_taxonomy');
function save_my_custom_taxonomy( $post_id ) {
    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
        return;

    if ( !wp_verify_nonce($_POST['dropdown-nonce'], 'custom-dropdown'))
        return;

    $brands = array_map('intval', $_POST['custombrands']);
    wp_set_object_terms($post_id, $brands, 'brands');
}

add_action('wp_ajax_get_brand_models', 'get_brand_models');
function get_brand_models() {
    check_ajax_referer('custom-dropdown', 'dropdown-nonce');
    if (isset($_POST['custombrand'])) {
        $models = get_terms( 'brands', 'hide_empty=0&child_of='. $_POST['custombrand']);
        echo "<option value='0'>Select one</option>";
        foreach ($models as $model) {
            echo "<option value='{$model->term_id}'>{$model->name}</option>";
        }
    }
    die();
}

@ হামেদুল্লাহ বেশ ভারী জিনিস হামেদুল্লাহ, তবুও দুর্দান্ত কাজ। +1
ভাইসপ্রেস

@ হামেদুল্লাহ খুব সুন্দর তবে এতে আমার সমস্যা আছে। আমি এই সমস্ত কোডটি আমার ফাংশনগুলিতে পিস্ট করেছি এবং যখন আমি পোস্টের ব্যাক-এন্ডে যাই তখন আমি এটি পাই: সতর্কতা: সংজ্ঞায়িত () কমপক্ষে 2 টি প্যারামিটার প্রত্যাশা করে, 1 কোডের এই লাইনের দিকে নির্দেশ করছে if ( define('DOING_AUTOSAVE') && DOING_AUTOSAVE ):))
কোভাস

দয়া করে সংজ্ঞায়িত if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ))
উদাহরণটিতে

@ হামেদুল্লাহ দুর্দান্ত, সমাধানের জন্য ধন্যবাদ :)
কোভাস

এই স্নিপেটটি খুঁজে পেয়ে উত্তেজিত হয়েছিল এবং সাইটে এটি চেষ্টা করেছিল। আমি এটি কোনও কাস্টম পোস্ট-টাইপ ব্যবহার করছি, পোস্টগুলি নয়, তবে মেটাবক্সটি দেখছি না। অন্যান্য পোস্ট-টাইপগুলিতে এই কাজটি করার জন্য প্রয়োজনীয় পদক্ষেপগুলি রয়েছে? ..I আমার কাস্টম বর্গীকরণ সূত্র থেকে কর নাম পরিবর্তন করেনি, শুধুমাত্র একক কর জন্য এই ব্যবহার, মূল ব্যক্তি এ একাধিক না অনুরোধ
শন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.