Поддержка Проблемы и решения Checkbox > select в метаблоке выбора рубрик

  • Как поменять чекбоксы на выпадающий список (select) в блоке выбора рубрик (таксономий) при редактировании записей?

    Нашёл такое вот решение:
    https://misha.blog/wordpress/single-choose-taxonom…
    но здесь меняются чекбоксы на радио кнопки, как изменить код, чтобы он подошёл для селектов?

    Я попробовал самостоятельно, но у меня не сохраняются изменения и в селекте изначально всегда показывается первое по алфавиту значения, а нужно выбранное, либо без рубрики, если ничего не выбрано. Прошу помощи.
    Вот мой нормально не работающий код:

    <?php
    /*
     * главная функция
     */
    function tr_new_taxonomy_box() {
     
      // перечислить список таксономий через запятую
      $choosed_taxonomies = array( 'category' );
     
      if ( empty($choosed_taxonomies) )
        return;
     
      foreach ( $choosed_taxonomies as $tax_name ) {
        $taxonomy = get_taxonomy( $tax_name );
     
        // метабокс будет добавляться только для таксономий с иерархией
        if ( !$taxonomy->hierarchical || !$taxonomy->show_ui || empty($taxonomy->object_type) )
          continue;
     
        foreach ( $taxonomy->object_type as $post_type ) {
     
          // удаляем стандартный метабокс
          remove_meta_box( "{$tax_name}div", $post_type, 'side' );
     
          // добавляем собственный
          add_meta_box( "unique-{$tax_name}-div", $taxonomy->labels->singular_name, 'tr_tax_metabox', $post_type, 'side', 'high', array('taxonomy' => $tax_name) );
        }
      }
    }
    add_action( 'admin_menu', 'tr_new_taxonomy_box' );
     
    /*
     * функция для вывода непосредственно списка элементов таксономий
     */
    function tr_print_radiolist( $post_id, $taxonomy ) {
      $terms = get_terms( $taxonomy, array('hide_empty' => false, 'parent'  => 0) );
      if ( empty($terms) )
        return;
     
      // значение аттрибута name для всех радио-кнопок
      $name = ( $taxonomy == 'category' ) ? 'post_category' : "tax_input[{$taxonomy}]";
     
      // определяем, к каким рубрикам относится текущий пост
      $current_post_terms = get_the_terms( $post_id, $taxonomy );
      $current = array();
      if ( !empty($current_post_terms) ) {
        foreach ( $current_post_terms as $current_post_term )
          $current[] = $current_post_term->term_id;
      }
      
      // вывод списка
      $list = '';
      foreach ( $terms as $term ) {
        $list .= "<option name='{$name}[]' value='{$term->term_id}' id='{$taxonomy}-{$term->term_id}'>";
        $list .= "";
        $list .= "";
        $list .= "{$term->name}";
        $list .= "</option>\n";
     
        // если вам наплевать на вложенные рубрики, то цикл foreach можно закончить прямо здесь
    /* 		$childs = get_terms( $taxonomy, array('hide_empty' => false, 'parent'  => $term->term_id));
        if ( count($childs) > 0 ){
          $list .= "<ul class='children'>";
          foreach ($childs as $child){
            $list .= "<li id='{$taxonomy}-{$child->term_id}'>";
            $list .= "<label class='selectit'>";
            $list .= "<input type='radio' name='{$name}[]' value='{$child->term_id}' ".checked( in_array($child->term_id, $current), true, false )." id='in-{$taxonomy}-{$child->term_id}' />";
            $list .= " {$child->name}</label>";
            $list .= "</li>\n";
          }
          $list .= "</ul>";
        } */
      }
      echo $list;
    }
     
    /*
     * содержимое метабокса
     */
    function tr_tax_metabox( $post, $box ) {
      if ( !isset($box['args']) || !is_array($box['args']) )
        $args = array();
      else
        $args = $box['args'];
     
      $defaults = array('taxonomy' => 'category');
      extract( wp_parse_args($args, $defaults), EXTR_SKIP );
      $tax = get_taxonomy($taxonomy);
     
      $name = ( $taxonomy == 'category' ) ? 'post_category' : 'tax_input[' . $taxonomy . ']';
     
      $metabox = "<div id='taxonomy-{$taxonomy}' class='categorydiv'>";
      $metabox .= "<input type='hidden' name='{$name}' value='0' />";
      $metabox .= "<ul id='{$taxonomy}-tabs' class='category-tabs'>";
      $metabox .= "<li class='tabs'><a href='#{$taxonomy}-all' tabindex='3'>{$tax->labels->all_items}</a></li>";
      $metabox .= "</ul>";
      $metabox .= "<div id='{$name}-all' class='tabs-panel'>";
      $metabox .= "<select id='{$taxonomy}checklist' class='list:{$taxonomy} categorychecklist form-no-clear'>";
      echo $metabox;
     
      tr_print_radiolist( $post->ID, $taxonomy );
     
      echo "</select></div></div>";
    }
  • Тема «Checkbox > select в метаблоке выбора рубрик» закрыта для новых ответов.