Taxonomie-Dropdown-Metabox im Backend

Ich habe eine benutzerdefinierte Taxonomie mit dem Namen ” Brands und hierarchisch gestaltet, damit ich dort Automarken und -modelle hinzufügen und deren Beziehungen beibehalten kann:

  • Ford
    • Mustang
    • Mondeo
    • Fokus

Das Problem ist, dass diese Liste ziemlich lang werden kann und nur eine Marke und ein Modell pro Post benötigt werden, also sind die Checkboxen irreführend.

Ich denke daran, diese Metabox in zwei zu teilen (eine für Marke und eine für Modell) und sie zu Dropdowns zu machen. Wenn die Marke im ersten Dropdown-Menü ausgewählt wird, werden im zweiten Dropdown-Menü nur Modelle angezeigt, die mit dieser Marke in Zusammenhang stehen. Aber ich habe keine Ahnung, wie ich es programmieren soll. Vielleicht könnte mir jemand ein Beispiel zeigen?

Solutions Collecting From Web of "Taxonomie-Dropdown-Metabox im Backend"

Hier ist ein Beispiel. Ich habe auch einen Gist mit generischem Code erstellt.

 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 ?>  < ?php echo "Brand:"; echo ""; 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 ""; } else { echo ""; } } } echo ""; echo "
"; } 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 ""; foreach ($models as $model) { echo ""; } } die(); }