Поддержка Проблемы и решения Нет связи произвольной записи с категориями и метками

  • При выводе категорий и меток нового произвольного поля в single записи метки и категории не отображаются! А в администрировании все в порядке!
    Код создания новой категории записи и атрибутов к ней: может я тут что-то забыл добавить может что-то дописать… в меню этого раздела тоже нет…

    if ( ! function_exists( 'doors_cp' ) ) {
    
    // Опишем требуемый функционал для записей
    	function doors_cp() {
    $labels = array(
    	'name' => _x( 'Двери', 'Post Type General Name', 'doors' ),
    	'singular_name' => _x( 'Дверь', 'Post Type Singular Name', 'doors' ),
    	'menu_name' => __( 'Двери', 'doors' ),
    	'parent_item_colon' => __( 'Родительский:', 'doors' ),
    	'all_items' => __( 'Все двери', 'doors' ),
    	'view_item' => __( 'Просмотреть', 'doors' ),
    	'add_new_item' => __( 'Новая дверь', 'doors' ),
    	'add_new' => __( 'Добавить дверь', 'doors' ),
    	'edit_item' => __( 'Редактировать дверь', 'doors' ),
    	'update_item' => __( 'Обновить дверь', 'doors' ),
    	'search_items' => __( 'Найти дверь', 'doors' ),
    	'not_found' => __( 'Не найдено', 'doors' ),
    	'not_found_in_trash' => __( 'Не найдено в корзине', 'doors' ),
    );
    $args = array(
    	'labels' => $labels,
    	'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail' ),
    	'taxonomies' => array( 'doors_tax','doors_meta' ), // категории, которые мы создадим ниже
    	'public' => true,
    	'menu_position' => 5,
    	'menu_icon' => 'dashicons-layout',
    );
    register_post_type( 'doors', $args );
    }
    add_action( 'init', 'doors_cp', 0 ); // инициализируем
    }
    // Категории дверей
    if ( ! function_exists( 'doors_tax' ) ) {
    // Опишем требуемый функционал для категорий
    	function doors_tax() {
    $labels = array(
    	'name' => _x( 'Категории Дверей', 'Taxonomy General Name', 'doors' ),
    	'singular_name' => _x( 'Категория Двери', 'Taxonomy Singular Name', 'doors' ),
    	'menu_name' => __( 'Категории', 'doors' ),
    	'all_items' => __( 'Категории', 'doors' ),
    	'parent_item' => __( 'Родительская категория Двери', 'doors' ),
    	'parent_item_colon' => __( 'Родительская категория Двери:', 'doors' ),
    	'new_item_name' => __( 'Новая категория', 'doors' ),
    	'add_new_item' => __( 'Добавить новую категорию', 'doors' ),
    	'edit_item' => __( 'Редактировать категорию', 'doors' ),
    	'update_item' => __( 'Обновить категорию', 'doors' ),
    	'search_items' => __( 'Найти', 'doors' ),
    	'add_or_remove_items' => __( 'Добавить или удалить категорию', 'doors' ),
    	'choose_from_most_used' => __( 'Поиск среди популярных', 'doors' ),
    	'not_found' => __( 'Не найдено', 'doors' ),
    );
    $args = array(
    	'labels' => $labels,
    	'hierarchical' => true, /* true - по типу рубрик, false - по типу меток, по умолчанию - false */
    	'public' => true,
    );
    register_taxonomy( 'doors_tax', array( 'doors' ), $args );
    }
    add_action( 'init', 'doors_tax', 0 ); // инициализируем
    }
    
    // Метки дверей
    if ( ! function_exists( 'doors_meta' ) ) {
    // Опишем требуемый функционал для категорий
    	function doors_meta() {
    $labels = array(
    	'name' => _x( 'Метки', 'Taxonomy General Name', 'doors' ),
    	'singular_name' => _x( 'Метка Двери', 'Taxonomy Singular Name', 'doors' ),
    	'menu_name' => __( 'Метки', 'doors' ),
    	'all_items' => __( 'Метки', 'doors' ),
    	'new_item_name' => __( 'Новая метка', 'doors' ),
    	'add_new_item' => __( 'Добавить новую метку', 'doors' ),
    	'edit_item' => __( 'Редактировать метку', 'doors' ),
    	'update_item' => __( 'Обновить метку', 'doors' ),
    	'search_items' => __( 'Найти', 'doors' ),
    	'add_or_remove_items' => __( 'Добавить или удалить метку', 'doors' ),
    	'choose_from_most_used' => __( 'Поиск среди популярных', 'doors' ),
    	'not_found' => __( 'Не найдено', 'doors' ),
    );
    $args = array(
    	'labels' => $labels,
    	'hierarchical' => false, /* true - по типу рубрик, false - по типу меток, по умолчанию - false */
    	'public' => true,
    );
    register_taxonomy( 'doors_meta', array( 'doors' ), $args );
    }
    add_action( 'init', 'doors_meta', 0 ); // инициализируем
    }
    
    // Место вывода дополнительного поля
    function doors_meta_box() {
        add_meta_box(
            'doors_meta_box', // Идентификатор(id)
            'Дополнительная информация', // Заголовок области с мета-полями(title)
            'show_my_doors_metabox', // Вызов(callback)
            'doors', // Где будет отображаться наше поле, в нашем случае в разделе Двери
            'normal',
            'high');
    }
    add_action('add_meta_boxes', 'doors_meta_box'); // Запускаем функцию
    
    // Опишем в массиве требуемые нам поля --- редактирую
    $doors_meta_fields = array(
        array(
            'label' => 'Конструкция',
            'desc'  => 'Выберите конструкцию',
            'id'    => 'select_door_constr',
            'type'  => 'select',
            'options' => array (  // Параметры, всплывающие данные
                'one' => array (
                    'label' => 'Арочная',  // Название поля
                    'value' => 'Арочная'  // Значение
                ),
                'two' => array (
                    'label' => 'Парадная',  // Название поля
                    'value' => 'Парадная'  // Значение
                ),
                'three' => array (
                    'label' => 'Противопожарная',  // Название поля
                    'value' => 'Противопожарная'  // Значение
                ),
                'four' => array (
                    'label' => 'Решетчатая',  // Название поля
                    'value' => 'Решетчатая'  // Значение
                ),
                'five' => array (
                    'label' => 'Со вставками',  // Название поля
                    'value' => 'Со вставками'  // Значение
                ),
                'six' => array (
                    'label' => 'Усиленная',  // Название поля
                    'value' => 'Усиленная'  // Значение
                ),
                'seven' => array (
                    'label' => 'Со стеклами',  // Название поля
                    'value' => 'Со стеклами'  // Значение
                ),
                'eight' => array (
                    'label' => 'Двустворчатая',  // Название поля
                    'value' => 'Двустворчатая'  // Значение
                ),
                'nine' => array (
                    'label' => 'Тамбурная',  // Название поля
                    'value' => 'Тамбурная'  // Значение
                ),
                'ten' => array (
                    'label' => 'Техническая',  // Название поля
                    'value' => 'Техническая'  // Значение
                ),
                'eleven' => array (
                    'label' => 'Межкомнатная',  // Название поля
                    'value' => 'Межкомнатная'  // Значение
                )
            )
        ),
        array(
            'label' => 'Отделка',
            'desc'  => 'Выберите Отделку',
            'id'    => 'select_door_otd',
            'type'  => 'select',
            'options' => array (  // Параметры, всплывающие данные
                'one' => array (
                    'label' => 'Вагонка',  // Название поля
                    'value' => 'Вагонка'  // Значение
                ),
                'two' => array (
                    'label' => 'Винилкожа',  // Название поля
                    'value' => 'Винилкожа'  // Значение
                ),
                'three' => array (
                    'label' => 'Ламинат',  // Название поля
                    'value' => 'Ламинат'  // Значение
                ),
                'four' => array (
                    'label' => 'МДВ',  // Название поля
                    'value' => 'МДВ'  // Значение
                ),
                'five' => array (
                    'label' => 'Массив дерева',  // Название поля
                    'value' => 'Массив дерева'  // Значение
                ),
                'six' => array (
                    'label' => 'Нитроэмаль',  // Название поля
                    'value' => 'Нитроэмаль'  // Значение
                ),
                'seven' => array (
                    'label' => 'Порошковое напыление',  // Название поля
                    'value' => 'Порошковое напыление'  // Значение
                ),
                'eight' => array (
                    'label' => 'Филенчатое МДФ',  // Название поля
                    'value' => 'Филенчатое МДФ'  // Значение
                )
            )
        ),
        array(
            'label' => 'Ценовая категория',
            'desc'  => 'Выберите Ценовую Категорию',
            'id'    => 'select_door_price',
            'type'  => 'select',
            'options' => array (  // Параметры, всплывающие данные
                'one' => array (
                    'label' => 'Эконом',  // Название поля
                    'value' => 'Эконом'  // Значение
                ),
                'two' => array (
                    'label' => 'Средняя',  // Название поля
                    'value' => 'Средняя'  // Значение
                ),
                'three' => array (
                    'label' => 'Элитная',  // Название поля
                    'value' => 'Элитная'  // Значение
                ),
                'four' => array (
                    'label' => 'Эксклюзивная',  // Название поля
                    'value' => 'Эксклюзивная'  // Значение
                )
    		)
        ),
        array(
            'label' => 'Цена',
            'desc'  => 'Российский рубль',
            'id'    => 'price',  // даем идентификатор.
            'type'  => 'text'  // Указываем тип поля.
        ),
        array(
            'label' => 'Артикул',
            'desc'  => 'Номер в базе',
            'id'    => 'article',
            'type'  => 'text'
        )
    );
    // Выведем описанные дополнительные поля в новую дополнительную зону:
    function show_my_doors_metabox() {
    global $doors_meta_fields; // Обозначим наш массив с полями глобальным
    global $post;  // Глобальный $post для получения id создаваемого/редактируемого поста
    // Выводим скрытый input, для верификации. Безопасность прежде всего!
    echo '<input type="hidden" name="custom_meta_box_nonce" value="'.wp_create_nonce(basename(__FILE__)).'" />';  
    
        // Начинаем выводить таблицу с полями через цикл
        echo '<table class="form-table">';
        foreach ($doors_meta_fields as $field) {
            // Получаем значение если оно есть для этого поля
            $meta = get_post_meta($post->ID, $field['id'], true);
            // Начинаем выводить таблицу
            echo '<tr>
                    <th><label for="'.$field['id'].'">'.$field['label'].'</label></th>
                    <td>';
                    switch($field['type']) {
                        // Текстовое поле
     case 'text':
         echo '<input type="text" name="'.$field['id'].'" id="'.$field['id'].'" value="'.$meta.'" size="30" />
             <br /><span class="description">'.$field['desc'].'</span>';
     break;
     // Список
     case 'select':
         echo '<select name="'.$field['id'].'" id="'.$field['id'].'">';
         foreach ($field['options'] as $option) {
             echo '<option', $meta == $option['value'] ? ' selected="selected"' : '', ' value="'.$option['value'].'">'.$option['label'].'</option>';
         }
         echo '</select><br /><span class="description">'.$field['desc'].'</span>';
     break;
                    }
            echo '</td></tr>';
        }
        echo '</table>';
    }
    // Запись
    function save_my_doors_meta_fields($post_id) {
        global $doors_meta_fields;  // Массив с нашими полями
    
        // проверяем наш проверочный код
        if (!wp_verify_nonce($_POST['custom_meta_box_nonce'], basename(__FILE__)))
            return $post_id;
        // Проверяем авто-сохранение
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)
            return $post_id;
        // Проверяем права доступа
        if ('doors' == $_POST['post_type']) {
            if (!current_user_can('edit_page', $post_id))
                return $post_id;
            } elseif (!current_user_can('edit_post', $post_id)) {
                return $post_id;
        }  
    
        // Если все отлично, прогоняем массив через foreach
        foreach ($doors_meta_fields as $field) {
            $old = get_post_meta($post_id, $field['id'], true); // Получаем старые данные (если они есть), для сверки
            $new = $_POST[$field['id']];
            if ($new && $new != $old) {  // Если данные новые
                update_post_meta($post_id, $field['id'], $new); // Обновляем данные
            } elseif ('' == $new && $old) {
                delete_post_meta($post_id, $field['id'], $old); // Если данных нету, удаляем мету.
            }
        } // end foreach
    }
    add_action('save_post', 'save_my_doors_meta_fields'); // Запускаем функцию сохранения

  • Тема «Нет связи произвольной записи с категориями и метками» закрыта для новых ответов.