Нет связи произвольной записи с категориями и метками
-
При выводе категорий и меток нового произвольного поля в 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'); // Запускаем функцию сохранения
- Тема «Нет связи произвольной записи с категориями и метками» закрыта для новых ответов.