Поддержка Проблемы и решения Создание связей (многие ко многим) через meta box между новыми типами записей

  • Уважаемые программисты помогите решить задачку.
    Необходимо создать:
    1) новый тип записи: 1 шт., древовидный (сделал, наименование ugrozy_po_bdu, код прилагаю ниже)
    2) новый тип записи: 1 шт., не древовидный (сделал, наименование mery_ib_gis_ispdn, код прилагаю ниже)
    3) связи: многие ко многим для всех 2-ух новых типов записей (сделал частично, код прилагаю ниже)

    По п.3 у меня возникали вопросы, и я не могу сделать связи.
    Связи я решил делать через meta_boxes. meta_boxes созданы для обоих новых типов записей.
    В boxes_ugrozy_po_bdu для типа записи mery_ib_gis_ispdn необходимо выводить в checkbox все записи из ugrozy_po_bdu.
    В boxes_mery_ib_gis_ispdn для типа записи ugrozy_po_bdu необходимо выводить в checkbox все записи из mery_ib_gis_ispdn.

    Соответственно связи многие ко многим для 2-ух новых типов записей должны создаваться через checkbox. Как раз это у меня не получается.

    Помогите решить эту задачу. Спасибо!

    add_action('add_meta_boxes', function () {
      add_meta_box( 'boxes_ugrozy_po_bdu', 'Меры ИБ, 'fun_ugrozy_po_bdu', 'ugrozy_po_bdu', 'side', 'low' );
    }, 1);
    function fun_ugrozy_po_bdu( $post ){
      $items = get_posts(array(
        'post_type' => 'mery_ib_gis_ispdn',
        'posts_per_page' => -1,
        'orderby' => 'post_title',
        'order' => 'ASC',
      ));
      if( $items ){
        echo '<div style="max-height:600px; overflow-y:auto;"><ul>';
        foreach((array) $items as $item ){
          [необходимо выводить checkbox]
        }
        echo '</ul></div>';
      }
    }
    
    add_action('add_meta_boxes', function(){
      add_meta_box( 'boxes_mery_ib_gis_ispdn', 'Угрозы по БДУ', 'fun_mery_ib_gis_ispdn', 'mery_ib_gis_ispdn', 'side', 'low' );
    }, 1);
    function fun_mery_ib_gis_ispdn( $post ){
      $items = get_posts(array(
        'post_type' => 'ugrozy_po_bdu',
        'post_parent' => $post -> ID,
        'posts_per_page' => -1,
        'orderby' => 'post_title',
        'order' => 'ASC',
      ));
      if( $items ){
        foreach((array) $items as $item ){
          [необходимо выводить checkbox]
        }
      }
    }
    
    add_action('init', 'my_custom_init');
    function my_custom_init(){
      register_post_type('ugrozy_po_bdu', array(
        'labels' => array(
          'name' => 'Угрозы по БДУ',
          'singular_name' => 'Угроза',
          'add_new' => 'Добавить новую',
          'add_new_item' => 'Добавить новую угрозу',
          'edit_item' => 'Редактировать угрозу',
          'new_item' => 'Новая угроза',
          'view_item' => 'Посмотреть угрозу',
          'search_items' => 'Найти угрозу',
          'not_found' => 'Угроз не найдено',
          'not_found_in_trash' => 'В корзине угроз не найдено',
          'parent_item_colon' => '',
          'menu_name' => 'Угрозы по БДУ',
        ),
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
      ));
      register_post_type('mery_ib_gis_ispdn', array(
        'labels' => array(
          'name' => 'Меры',
          'singular_name' => 'Мера',
          'add_new' => 'Добавить новую',
          'add_new_item' => 'Добавить новую меру',
          'edit_item' => 'Редактировать меру',
          'new_item' => 'Новая мера',
          'view_item' => 'Посмотреть меру',
          'search_items' => 'Найти меру',
          'not_found' => 'Мер не найдено',
          'not_found_in_trash' => 'В корзине мер не найдено',
          'parent_item_colon' => '',
          'menu_name' => 'Меры',
        ),
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'hierarchical' => true,
      ));
    }
    • Тема изменена 3 года, 8 месяцев назад пользователем artexcite.
    • Тема изменена 3 года, 8 месяцев назад пользователем artexcite.
Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Модератор Yuri

    (@yube)

    Метабоксы состоят из двух частей:
    1. функция вывода на хуке ‘add_meta_boxes’ или параметром register_meta_box_cb у register_post_type()
    2. функция обработки и сохранения введенных данных на хуке ‘save_post’.

    Второй части я в Вашем коде не вижу.

    2-ая часть кода:

    add_action('save_post', 'fun_save_post');
    function fun_save_post($post_id){
      update_post_meta( $post_id, 'ttt_cb', $_POST['ttt_cb']);
    }

    Этот код должен сохранять значение checked (true или false) принятого от checkbox.
    Так вот у меня не получается правильно добавить checkbox в meta_boxes.

    Как добавить checkbox в meta_boxes?

Просмотр 2 ответов — с 1 по 2 (всего 2)
  • Тема «Создание связей (многие ко многим) через meta box между новыми типами записей» закрыта для новых ответов.