• Доброе время суток.. подскажите как мне создать пользовательские поля один раз и выводить их на всех страницах.. у меня на сайте в шапке в футере и в контенте баннеры или текстовые блоки.. постоянно на каждой страницы и записи не совсем удобно их вписывать..создаю я их тоже при помощи плагина в админ панели .. плагин just-custom-fields

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • // подключаем функцию активации мета блока (my_extra_fields)
    add_action('admin_init', 'my_extra_fields', 1);

    function my_extra_fields() {
        add_meta_box( 'extra_fields', '<strong>НАЗВАНИЕ МЕТАБЛОКА</strong>', 'extra_fields_box_func', '<strong>ТИП ЗАПИСИ*</strong>, 'normal', 'high'  );
    }

    * — если для страницы page, запись post и тд тп, если Ваш тип записей тогда пишите наименование Вашего типа записей.

    Далее заполняем блок html формами, вот этот блок правьте так что бы получились те поля какие вам надо

    // код блока
    function extra_fields_box_func( $post ){
    ?>
    	<p><label><input type="text" name="extra[title]" value="<?php echo get_post_meta($post->ID, 'title', 1); ?>" style="width:50%" /> ← заголовок страницы (title)</label></p>
    
    	<p>Описание статьи (description):
    		<textarea type="text" name="extra[description]" style="width:100%;height:50px;"><?php echo get_post_meta($post->ID, 'description', 1); ?></textarea>
    	</p>
    
    	<p>Видимость поста: <?php $mark_v = get_post_meta($post->ID, 'robotmeta', 1); ?>
    		 <label><input type="radio" name="extra[robotmeta]" value="" <?php checked( $mark_v, '' ); ?> /> index,follow</label>
    		 <label><input type="radio" name="extra[robotmeta]" value="nofollow" <?php checked( $mark_v, 'nofollow' ); ?> /> nofollow</label>
    		 <label><input type="radio" name="extra[robotmeta]" value="noindex" <?php checked( $mark_v, 'noindex' ); ?> /> noindex</label>
    		 <label><input type="radio" name="extra[robotmeta]" value="noindex,nofollow" <?php checked( $mark_v, 'noindex,nofollow' ); ?> /> noindex,nofollow</label>
    	</p>
    
    	<p><select name="extra[select]" />
    			<?php $sel_v = get_post_meta($post->ID, 'select', 1); ?>
    			<option value="0">----</option>
    			<option value="1" <?php selected( $sel_v, '1' )?> >Выбери меня</option>
    			<option value="2" <?php selected( $sel_v, '2' )?> >Нет, меня</option>
    			<option value="3" <?php selected( $sel_v, '3' )?> >Лучше меня</option>
    		</select> ← выбор за вами</p>
    
    	<input type="hidden" name="extra_fields_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
    <?php
    }

    Ну и в конце добавляем

    // включаем обновление полей при сохранении
    add_action('save_post', 'my_extra_fields_update', 0);
    
    /* Сохраняем данные, при сохранении поста */
    function my_extra_fields_update( $post_id ){
        if ( !wp_verify_nonce($_POST['extra_fields_nonce'], __FILE__) ) return false; // проверка
    	if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE  ) return false; // выходим если это автосохранение
    	if ( !current_user_can('edit_post', $post_id) ) return false; // выходим если юзер не имеет право редактировать запись
    
    	if( !isset($_POST['extra']) ) return false;	// выходим если данных нет
    
    	// Все ОК! Теперь, нужно сохранить/удалить данные
    	$_POST['extra'] = array_map('trim', $_POST['extra']); // чистим все данные от пробелов по краям
    	foreach( $_POST['extra'] as $key=>$value ){
    		if( empty($value) )
    			continue delete_post_meta($post_id, $key); // удаляем поле если значение пустое
    
    		update_post_meta($post_id, $key, $value); // add_post_meta() работает автоматически
    	}
    	return $post_id;
    }
    ?>

    Проще к сожалению не объяснить, громоздкими плагинами не пользуюсь, хотя может они и есть.

    Только вот не совсем понятно куда вставить эти части))

    в functions.php конечно

    continue delete_post_meta($post_id, $key);

    Какой смысл передавать результат работы delete_post_meta в continue?
    Наверно так нужно?

    { delete_post_meta($post_id, $key); continue; }

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Custom Field» закрыта для новых ответов.