Кратенько.
На данном примере
Очень просто создать свой собственный тип записей. (изменить или добавить можно что угодно)
Данное можно вставить в функцию темы или подключить как плагин, разницы нет, как я уже писал, выкладываю как плагин.
Как подключить вывод на страницы... оставлю возможность решить Вам
На данном примере
Очень просто создать свой собственный тип записей. (изменить или добавить можно что угодно)
Данное можно вставить в функцию темы или подключить как плагин, разницы нет, как я уже писал, выкладываю как плагин.
Как подключить вывод на страницы... оставлю возможность решить Вам
Код:
<?php
/*
Plugin Name: Создаем доп возможности
Plugin URI: http://clubwp.ru
Description: Создаем новые возможности
Version: 1.0
Author: clubwp.ru
Author URI: http://clubwp.ru
License: GPL2
*/
/* Copyright YEAR PLUGIN_AUTHOR_NAME (email : email автора плагина)
This program is free software; you can avtoistribute it and/or modify
it under the terms of the GNU General Public License, version 2, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
?>
<?php
if(is_admin()) {
wp_enqueue_script('jquery-ui-datepicker','','','',true);
wp_enqueue_script('media-upload');
wp_enqueue_script('thickbox');
wp_enqueue_script('imagefield', WP_PLUGIN_URL.'/imagefield.js', array('jquery','media-upload','thickbox')); // Новая строчка
wp_enqueue_style('jquery-ui-custom', WP_PLUGIN_URL.'/jquery-ui.css'); // Ваш путь к файлу!!!
}
add_action('admin_head','add_custom_scripts');
function add_custom_scripts() {
global $avto_meta_fields, $post;
$output = '<script type="text/javascript">
jquery(function() {';
foreach ($avto_meta_fields as $field) {
if($field['type'] == 'date')
$output .= 'jquery(".datepicker").datepicker();';
}
$output .= '});
</script>';
echo $output;
}
if ( ! function_exists( 'avto_book_cp' ) ) {
// Опишем требуемый функционал
function avto_book_cp() {
$labels = array(
'name' => _x( 'Автомобили', 'Post Type General Name', 'avto_book' ),
'singular_name' => _x( 'Автомобили', 'Post Type Singular Name', 'avto_book' ),
'menu_name' => __( 'Автомобили', 'avto_book' ),
'parent_item_colon' => __( 'Родительский:', 'avto_book' ),
'all_items' => __( 'Все записи', 'avto_book' ),
'view_item' => __( 'Просмотреть', 'avto_book' ),
'add_new_item' => __( 'Добавить новую запись', 'avto_book' ),
'add_new' => __( 'Добавить новую', 'avto_book' ),
'edit_item' => __( 'Редактировать запись', 'avto_book' ),
'update_item' => __( 'Обновить запись', 'avto_book' ),
'search_items' => __( 'Найти запись', 'avto_book' ),
'not_found' => __( 'Не найдено', 'avto_book' ),
'not_found_in_trash' => __( 'Не найдено в корзине', 'avto_book' ),
);
$args = array(
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', ),
'taxonomies' => array( 'avto_book_tax' ), // категории, которые мы создадим ниже
'public' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-book',
);
register_post_type( 'avto_book', $args );
}
add_action( 'init', 'avto_book_cp', 0 ); // инициализируем
}
if ( ! function_exists( 'avto_book_tax' ) ) {
// Опишем требуемый функционал
function avto_book_tax() {
$labels = array(
'name' => _x( 'Категории', 'Taxonomy General Name', 'avto_book' ),
'singular_name' => _x( 'Категория', 'Taxonomy Singular Name', 'avto_book' ),
'menu_name' => __( 'Категории', 'avto_book' ),
'all_items' => __( 'Категории', 'avto_book' ),
'parent_item' => __( 'Родительская категория', 'avto_book' ),
'parent_item_colon' => __( 'Родительская категория:', 'avto_book' ),
'new_item_name' => __( 'Новая категория', 'avto_book' ),
'add_new_item' => __( 'Добавить новую категорию', 'avto_book' ),
'edit_item' => __( 'Редактировать категорию', 'avto_book' ),
'update_item' => __( 'Обновить категорию', 'avto_book' ),
'search_items' => __( 'Найти', 'avto_book' ),
'add_or_remove_items' => __( 'Добавить или удалить категорию', 'avto_book' ),
'choose_from_most_used' => __( 'Поиск среди популярных', 'avto_book' ),
'not_found' => __( 'Не найдено', 'avto_book' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
);
register_taxonomy( 'avto_book_tax', array( 'avto_book' ), $args );
}
add_action( 'init', 'avto_book_tax', 0 ); // инициализируем
}
function avtobook_meta_box() {
add_meta_box(
'avtobook_meta_box', // Идентификатор(id)
'Автомобили - дополнительная информация', // Заголовок области с мета-полями(title)
'show_my_avto_metabox', // Вызов(callback)
'avto_book', // Где будет отображаться наше поле, в нашем случае в разделе Автомобили
'normal',
'high');
}
add_action('add_meta_boxes', 'avtobook_meta_box'); // Запускаем функцию
$avto_meta_fields = array(
array(
'label' => 'Тип',
'desc' => 'Выберите тип.',
'id' => 'select_type',
'type' => 'select',
'options' => array ( // Параметры, всплывающие данные
'one' => array (
'label' => 'Передний привод', // Название поля
'value' => 'Передний привод' // Значение
),
'two' => array (
'label' => 'Задний привод', // Название поля
'value' => 'Задний привод' // Значение
),
'three' => array (
'label' => 'Полный привод', // Название поля
'value' => 'Полный привод' // Значение
)
)
),
array(
'label' => 'Класс',
'desc' => 'Выберите класс.',
'id' => 'select_class',
'type' => 'select',
'options' => array ( // Параметры, всплывающие данные
'one' => array (
'label' => 'Седан', // Название поля
'value' => 'Седан' // Значение
),
'two' => array (
'label' => 'Универсал', // Название поля
'value' => 'Универсал' // Значение
),
'three' => array (
'label' => 'Пикап', // Название поля
'value' => 'Пикап' // Значение
)
)
),
array(
'label' => 'Тип КПП',
'desc' => '',
'id' => 'order', // даем идентификатор.
'type' => 'text' // Указываем тип поля.
),
array(
'label' => 'Объем ДВС',
'desc' => '',
'id' => 'kind', // даем идентификатор.
'type' => 'text' // Указываем тип поля.
),
array(
'name' => 'Image',
'label' => 'Логотип',
'desc' => '',
'id' => 'image',
'type' => 'image'
),
array(
'label' => 'Производится или нет',
'desc' => '',
'id' => 'lost',
'type' => 'select',
'options' => array ( // Параметры, всплывающие данные
'one' => array (
'label' => 'Производится', // Название поля
'value' => 'Производится' // Значение
),
'three' => array (
'label' => 'Снят с производства', // Название поля
'value' => 'Снят с производства' // Значение
)
)
),
array(
'label' => 'Дата',
'desc' => 'Дата начала производства.',
'id' => 'date',
'type' => 'date'
),
);
function show_my_avto_metabox() {
global $avto_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 ($avto_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;
case 'image':
$image = WP_PLUGIN_URL.'/image.png';
echo '<span class="custom_default_image" style="display:none">'.$image.'</span>';
if ($meta) { $image = wp_get_attachment_image_src($meta, 'medium'); $image = $image[0]; }
echo '<input name="'.$field['id'].'" type="hidden" class="custom_upload_image" value="'.$meta.'" />
<img src="'.$image.'" class="custom_preview_image" alt="" /><br />
<input class="custom_upload_image_button button" type="button" value="Выберите изображение" />
<small> <a href="#" class="custom_clear_image_button">Убрать изображение</a></small>
<br clear="all" /><span class="description">'.$field['desc'].'</span>';
break;
case 'date':
echo '<input type="date" name="'.$field['id'].'" id="'.$field['id'].'" value="'.$meta.'" size="30" />
<br /><span class="description">'.$field['desc'].'</span>';
break;
}
echo '</td></tr>';
}
echo '</table>';
}
function save_my_avto_meta_fields($post_id) {
global $avto_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 ('avto_book' == $_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 ($avto_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_avto_meta_fields'); // Запускаем функцию сохранения
Последнее редактирование: