Noticы — как быть?
-
Снова здравстуйте!
Добавил себе flexslider в тему, зарегистрировал custom post type slider, добавил метабокс для url слайдера. все работает хорошо, НО когда я хочу добавить новый слайдер, у меня выползают следующие штуки:Notice: Undefined index: post_type in /.../slider_post_type.php on line 141 Notice: Undefined index: wptuts_slideurl in /.../slider_post_type.php on line 152 Notice: Undefined index: reply_metabox_nonce in /.../reply_post_type.php on line 106
как я понимаю все эти нотисы говорят о том, что я запрашиваю данные которые будут определены только после сохранения слайдера, по клику на «Опубликовать». верно ли это? и как на ваш взгляд грамотней объявить эти переменные, чтобы не вылазило подобных штук?
слайдер запиливал по этому туториалу
http://xozblog.ru/2012/12/wordpress-slider/
это slider_post_type.php :
<?php // 1.0. Add post type for slider add_action('init', 'register_slides_posttype'); function register_slides_posttype() { $labels = array( 'name' => _x( 'Слайды', 'post type general name' ), 'singular_name' => _x( 'Слайд', 'post type 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' => __( 'Слайды' ) ); $supports = array('title','thumbnail','cat-slides'); $post_type_args = array( 'labels' => $labels, 'singular_label' => __('Slide'), 'public' => true, // публичный тип 'show_ui' => true, // отображать на панели админа 'publicly_queryable'=> true, // разрешаем запросы к этому типу записей из шаблона 'query_var' => true, 'capability_type' => 'post', // группа разрешений 'has_archive' => false, // без поддержки архивов 'hierarchical' => true, // иерархический, будут категории 'rewrite' => array('slug' => 'slides', 'with_front' => false ), // правило записи урлов, префикс slides но не показываем 'supports' => $supports, 'menu_position' => 27, // Позиция в меню 'menu_icon' => 'dashicons-images-alt2' // иконка на панели в админке ); register_post_type('slides',$post_type_args); } // 2.0. Add taconomy for slider post type add_action( 'init', 'my_taxonomies_slider',0); function my_taxonomies_slider() { $labels = array( 'name' => _x( 'Категории слайдов', 'taxonomy general name' ), 'singular_name' => _x( 'Категория слайдов', 'taxonomy singular name' ), 'search_items' => __( 'Найти категорию слайдов' ), 'all_items' => __( 'Все категории слайдов' ), 'parent_item' => __( 'Родительская категория слайдов' ), 'parent_item_colon' => __( 'Родительская категория слайдов:' ), 'edit_item' => __( 'Редактировать категорию слайдов' ), 'update_item' => __( 'Обновить категорию слайдов' ), 'add_new_item' => __( 'Добавить новую категорию слайдов' ), 'new_item_name' => __( 'Новая категория слайдов' ), 'menu_name' => __( 'Категории слайдов' ), ); $args = array( 'labels' => $labels, 'hierarchical' => true, // если true значит используются категории, иначе теги ); register_taxonomy( 'cat-slides', 'slides', $args ); } // 3.0. Add Meta box for picture's URL $slidelink_2_metabox = array( 'id' => 'slidelink', // идентификатор 'title' => 'Ссылка на слайд', // заголовок 'page' => array('slides'), // для всех записей типа slides 'context' => 'normal', 'priority' => 'default', 'fields' => array( // единственное поле для URL array( 'name' => 'URL слайда', 'desc' => '', 'id' => 'wptuts_slideurl', 'class' => 'wptuts_slideurl', 'type' => 'text', 'rich_editor' => 0, 'max' => 0 ), ) ); add_action('admin_menu', 'wptuts_add_slidelink_2_meta_box'); function wptuts_add_slidelink_2_meta_box() { global $slidelink_2_metabox; foreach($slidelink_2_metabox['page'] as $page) { add_meta_box($slidelink_2_metabox['id'], $slidelink_2_metabox['title'], 'wptuts_show_slidelink_2_box', $page, 'normal', 'default', $slidelink_2_metabox); } } // функция отображения метабокса function wptuts_show_slidelink_2_box() { global $post; global $slidelink_2_metabox; global $wptuts_prefix; global $wp_version; // используем nonce для проверки echo '<input type="hidden" name="wptuts_slidelink_2_meta_box_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; echo '<table class="form-table">'; foreach ($slidelink_2_metabox['fields'] as $field) { // получаем текущие данные записи $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<th style="width:20%"><label for="', $field['id'], '">', stripslashes($field['name']), '</label></th>', '<td class="wptuts_field_type_' . str_replace(' ', '_', $field['type']) . '">'; switch ($field['type']) { case 'text': echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta, '" size="30" style="width:97%" /><br/>', '', stripslashes($field['desc']); break; } echo '<td>', '</tr>'; } echo '</table>'; } // Сохранение введенной ссылки add_action('save_post', 'wptuts_slidelink_2_save'); function wptuts_slidelink_2_save($post_id) { global $post; global $slidelink_2_metabox; // проверка if ( isset($_POST['at_nonce']) && !wp_verify_nonce($_POST['wptuts_slidelink_2_meta_box_nonce'], basename(__FILE__))) { return $post_id; } // проверка автосохранения if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } // проверка разрешения прав на редактирование if ('page' == $_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 ($slidelink_2_metabox['fields'] as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { if($field['type'] == 'date') { $new = wptuts_format_date($new); update_post_meta($post_id, $field['id'], $new); } else { if(is_string($new)) { $new = $new; } update_post_meta($post_id, $field['id'], $new); } } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } }
а это reply_post_type.php :
<?php // 1.0. Add post type for slider add_action('init', 'register_reply_posttype'); function register_reply_posttype() { $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' => __( 'Отзывы' ) ); $supports = array('title','editor','thumbnail'); $post_type_args = array( 'labels' => $labels, 'singular_label' => __('Reply'), 'public' => true, // публичный тип 'show_ui' => true, // отображать на панели админа 'publicly_queryable'=> true, // разрешаем запросы к этому типу записей из шаблона 'query_var' => true, 'capability_type' => 'post', // группа разрешений 'has_archive' => false, // без поддержки архивов 'hierarchical' => true, // иерархический, будут категории 'rewrite' => array('slug' => 'replys', 'with_front' => false ), // правило записи урлов, префикс slides но не показываем 'supports' => $supports, 'menu_position' => 27, // Позиция в меню 'menu_icon' => 'dashicons-format-quote' // иконка на панели в админке ); register_post_type('replys',$post_type_args); } // 2.0. Create metabox for author custom field add_action('admin_menu', 'add_author_reply_metabox'); $replylinks_2_metabox = array( 'id' => 'reply_author_block', // идентификатор 'title' => 'Автор отзыва', // заголовок 'post' => array('replys'), // for all replys post type 'context' => 'normal', 'priority' => 'default', 'fields' => array( // единственное поле для URL array( 'name' => 'Имя', 'desc' => '', 'id' => 'reply_author_name', 'class' => 'reply_author_name', 'type' => 'text', 'rich_editor' => 0, 'max' => 0 ), ) ); function add_author_reply_metabox() { global $replylinks_2_metabox; foreach($replylinks_2_metabox['post'] as $post) { add_meta_box($replylinks_2_metabox['id'], $replylinks_2_metabox['title'], 'show_reply_metabox', $post, 'normal', 'default', $replylinks_2_metabox); } } // функция отображения метабокса function show_reply_metabox() { global $post; global $replylinks_2_metabox; global $wp_prefix; global $wp_version; // используем nonce для проверки echo '<input type="hidden" name="reply_metabox_nonce" value="', wp_create_nonce(basename(__FILE__)), '" />'; echo '<table class="form-table">'; foreach ($replylinks_2_metabox['fields'] as $field) { // получаем текущие данные записи $meta = get_post_meta($post->ID, $field['id'], true); echo '<tr>', '<th style="width:20%"><label for="', $field['id'], '">', stripslashes($field['name']), '</label></th>', '<td class="field_type_' . str_replace(' ', '_', $field['type']) . '">'; switch ($field['type']) { case 'text': echo '<input type="text" name="', $field['id'], '" id="', $field['id'], '" value="', $meta, '" size="30" style="width:97%" /><br/>', '', stripslashes($field['desc']); break; } echo '<td>', '</tr>'; } echo '</table>'; } // Сохранение введенной ссылки add_action('save_post', 'save_replyname_item'); function save_replyname_item($post_id) { global $post; global $replylinks_2_metabox; // проверка if (!wp_verify_nonce($_POST['reply_metabox_nonce'], basename(__FILE__))) { return $post_id; } // проверка автосохранения if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return $post_id; } // проверка разрешения прав на редактирование if ('post' == $_POST['post_type']) { if (!current_user_can('edit_post', $post_id)) { return $post_id; } } elseif (!current_user_can('edit_page', $post_id)) { return $post_id; } foreach ($replylinks_2_metabox['fields'] as $field) { $old = get_post_meta($post_id, $field['id'], true); $new = $_POST[$field['id']]; if ($new && $new != $old) { if($field['type'] == 'date') { $new = format_date($new); update_post_meta($post_id, $field['id'], $new); } else { if(is_string($new)) { $new = $new; } update_post_meta($post_id, $field['id'], $new); } } elseif ('' == $new && $old) { delete_post_meta($post_id, $field['id'], $old); } } } ?>
- Тема «Noticы — как быть?» закрыта для новых ответов.