/ Wordpress / Создание metabox

Создание metabox

HIT

18.08.2016

2095

Metabox — это произвольное поле реализованное в виде специальной формы (оболочка для PostMeta). Создание metabox’а самостоятельно — лучшая альтернатива плагину Advanced custom fields, особенно для релизации доп.полей в плагинах.

Создание metabox’а

Создаем 3 функции: инициализация metabox, функция вывода поля, функция сохранения значения.
slidelink — ID поля, понадобится при вызове.

add_action('add_meta_boxes', 'link_box');
function link_box() {
	add_meta_box(
		'slidelink_box',
		'Ссылка слайда',
		'atb_box_func', //привязка функции вывода поля (ниже)
		'slide',
		'normal',
		'high'
	);
}

function atb_box_func($post){
	$slidelink = get_post_meta($post->ID, 'slidelink', 1);

	?>
	<label><input style="width:100%;" type="text" name="extra[slidelink]" value="<?php if($slidelink){echo $slidelink;}?>" /></label>
	<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>" />
	<?php
}


add_action('save_post', 'atb_box_update');
function atb_box_update($post_id){
	if (!wp_verify_nonce($_POST['atb_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; // Проверка, что нам пришли все поля
	foreach($_POST['extra'] as $key=>$value){ // Циклом добавляем поля. Можно и в ручную это делать... Но так проще добавить новое поле
		if(empty($value) AND $value != 0){ // Если значение пустое и не равно 0
			delete_post_meta($post_id, $key); // Удаляем это поле из мета-данных
			continue; // Продолжаем
		}
		update_post_meta($post_id, $key, $value); // Обновляем или добавляем мета-данные
	}
	return $post_id;
}

Вывод данных metabox’а

Вывод данных metabox’а аналогиечен выводу данных из PostMeta.

Также можно сделать проверку на наличие данных у metabox

<?php if ( get_post_meta($post->ID, 'thumb', true) ) : ?>
<a href="<?php the_permalink() ?>" rel="bookmark">
<img class="thumb" src="<?php echo get_post_meta($post->ID, 'thumb', true) ?>" alt="<?php the_title(); ?>" />
</a>
<?php endif; ?>

Metabox textarea

Имя поля, при выводе — config

add_action( 'add_meta_boxes', 'myplugin_add_custom_box' );

add_action( 'save_post', 'myplugin_save_postdata' );

// Adds a box to the main column on the Post and Page edit screens

function myplugin_add_custom_box() {
add_meta_box( 'wp_editor_test_1_box', 'Конфигурция зала', 'wp_editor_meta_box' );
}

// Prints the box content

function wp_editor_meta_box( $post ) {

// Use nonce for verification

wp_nonce_field( plugin_basename( __FILE__ ), 'myplugin_noncename' );

$field_value = get_post_meta( $post->ID, 'config', false );
wp_editor( $field_value[0], 'config' );
}

// When the post is saved, saves our custom data

function myplugin_save_postdata( $post_id ) {

// verify if this is an auto save routine.
// If it is our form has not been submitted, so we dont want to do anything
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return;

// verify this came from the our screen and with proper authorization,
// because save_post can be triggered at other times
if ( ( isset ( $_POST['myplugin_noncename'] ) ) && ( ! wp_verify_nonce( $_POST['myplugin_noncename'], plugin_basename( __FILE__ ) ) ) )
return;

// Check permissions
if ( ( isset ( $_POST['post_type'] ) ) && ( 'page' == $_POST['post_type'] ) ) {
if ( ! current_user_can( 'edit_page', $post_id ) ) {
return;
}
}
else {
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
}

// OK, we're authenticated: we need to find and save the data
if ( isset ( $_POST['config'] ) ) {
update_post_meta( $post_id, 'config', $_POST['config'] );
}

}

Чтобы добавить визуальный редактор — надо включить функцию Визуальный редактор в анонсе

Метабокс с редактором стилей (WYSIWYG)

Данный метод позволяет добавлять подобные поля не нарушаю общую систему обновления метаполей [extra].

// Поле Характеристики
add_action('add_meta_boxes', 'params_box');
function params_box() {
	add_meta_box('params_box', 'Характеристики', 'params_box_func', 'post', 'normal', 'high');
}

function params_box_func( $post ) {
	wp_nonce_field( plugin_basename( __FILE__ ), 'atb_nonce' );
	$params = get_post_meta( $post->ID, 'params', 1 );
	wp_editor( $params, 'params' );
}


// Сохранение полей (общий для всех полей)
add_action('save_post', 'fields_box_update');
function fields_box_update($post_id){
	
	if ( ( isset ( $_POST['atb_nonce'] ) ) && ( ! wp_verify_nonce( $_POST['atb_nonce'], plugin_basename( __FILE__ ) ) ) )
		return; // Проверка, что передаются нужные поля
	
	if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return false; // Проверка, что это не автосохранение
	if (!current_user_can('edit_post', $post_id)) return false; // Проверка, что пользователь может изменять этот пост	
	
	// Добавляем поля TyniMCE в массив extra
	if (!empty($_POST['params'])) { $_POST['extra']['params'] = $_POST['params']; } else { $_POST['extra']['params'] = ''; }

	
	if(!isset($_POST['extra']) ) return false; // Проверка, что поля для обновления есть
	foreach($_POST['extra'] as $key=>$value){
		if(empty($value) AND $value != 0){
			delete_post_meta($post_id, $key);
			continue; // Продолжаем
		}
		update_post_meta($post_id, $key, $value);
	}
	
	return $post_id;
}
[site-socialshare]
  • Похожие записи
  • Комментарии
  • Вложения
Загрузчик изображений для таксономии

Загрузчик изображений для таксономии

Создаем загрузчик изображений для термина таксономии. Данный пост содержит чистый метод создания metabox для термина таксономии. Есть более универсальный метод добавления изображений терминам, но нижеописанный способ может стать дополнительным, когда Читать далее »

/
Metabox для таксономии

Metabox для таксономии

Учимся создавать метаполя для терминов таксономии, оформлять их в виде metabox’а, а также выводить их во frontend. Визуальный редактор для описания терминов Превратить текстовое поле в стандартный визуальный редактор WP Читать далее »

Metabox woocommerce

Metabox woocommerce

У плагина woocommerce есть набор дополнительных полей при редактировании товара. При необходимости можно в группы полей WC добавить свои произвольные metabox. Должно получится так: Создание и отображение metabox Первый экшн Читать далее »

/

Добавить комментарий

Пока нет комментариев. Будь первым!

Создание metabox
Экранная лупа для изображения
Рекомендации для васЭкранная лупа для изображенияOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.