Поддержка Проблемы и решения 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ы — как быть?» закрыта для новых ответов.