Запис #9 "add_meta_box"

Додано: 2015-10-22 02:46:23 'admin

Функція add_meta_box() дозволяє створювати додаткові поля для записів. Це означає, що любий запис під будь-якою таксономією може отримати асолютно любий, довільний параметр.

Синтаксис функції:

add_meta_box( $id, $title, $callback, $post_type, $context, $priority, $callback_args );

Функція отримує сім вхідних параметрів:

- $id. Строка. Обов'язковий. Задає ІД блоку HTML тега.
- $title. Строка. Обов'язковий. Назва блоку.
- $callback. Строка, функція.Обов'язковий. Функція повинна містити HTML код для виводу користувачу на екран.
- $post_type. Строка. Обов'язковий. Тип запису для якої додається блок.
- $context. Строка. Місце для вивдоу блоку.
- $priority. Строка. Пріоритет блоку для показу (вище, нижче).
$callback_args. Масив. Аргументи для функції в параметрі $callback.

Ця функція по своїй природі повинна працювати в парі із хуком add_meta_boxes.
Приклад використання функції:

add_action( 'add_meta_boxes', 'source_for_jam' );
/**
 * Створення циклу, який буде обходити масив із типів, на яких потрібно вивести додаткове поле
 */
function source_for_jam() {

	$screens = array( 'items' );

	foreach ( $screens as $screen ) {

		add_meta_box(
			'myplugin_sectionid',
			'З чого зроблене варення',
			'source_for_jam_callback',
			$screen
		);
	}
}

/**
 * Callback функція для виводу HTML користувачу
 * 
 */
function source_for_jam_callback( $post ) {
	// Генерація поля hsdden nonce для безпеки
	wp_nonce_field( 'source_for_jam_save', 'myplugin_meta_box_nonce' );

	$value = get_post_meta( $post->ID, 'source-jam', true ); //Отримання поточних даних по ключу з БД

	echo '<input type="text" id="source_for_jam" name="source_for_jam" value="' . esc_attr( $value ) . '" size="25" />';
}

add_action( 'save_post', 'source_for_jam_save' );
/**
 * Коли йде збереження запису, выдбуваэться ы паралельне збереження значення додаткового поля
 *
 */
function source_for_jam_save( $post_id ) {
	// Перевірка наявність nonce коду.
	if ( ! isset( $_POST['myplugin_meta_box_nonce'] ) ) {
		return;
	}
	// Перевірка правильності nonce коду.
	if ( ! wp_verify_nonce( $_POST['myplugin_meta_box_nonce'], 'source_for_jam_save' ) ) {
		return;
	}
	// Якщо форма із автозбереженням - ніяких дій не потрібно.
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
		return;
	}
	// Перевірка прав користувача.
	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, тепер все готово до збереження. */
	// Перевірка, чи є поле з якого необхідно зберегти дані.
	if ( ! isset( $_POST['source_for_jam'] ) ) {
		return;
	}
	// Отримання даних.
	$my_data = sanitize_text_field( $_POST['source_for_jam'] );
	// Збереження змін в БД.
	update_post_meta( $post_id, 'source-jam', $my_data );
}

У першому рядку коду використовується хук на додавання мета блоків add_meta_boxes. Відбувається ініціалізація функції source_for_jam(), в якій проходить цикл по масиву з типами записів, де має відображатися додатковий блок. Під час проходження циклу відбувається ініціалізація функції add_meta_box(), яка безпосередньо додає мета блоки. Одним із параметрів цієї функції вказана callback функція source_for_jam_callback(). Тобто, кожен раз під час виклику функції add_meta_box() відбувається ініціалізація цієї функції. Ця функція забезпечує вивід html коду у браузер. Під час виведення коду у браузер формується перевірочне слово. Це забезпечується одним із параметрів функції, якої є ще одна функція source_for_jam_save() - для перевірки даних, які були введені в форму. Функція source_for_jam_save() також спрацьовує під час збереження даних запису, завдяки хуку save_post.

В результаті вийшов ось такий блок:

 Офіційний опис функції:

 add_meta_box()

 

Коментарі: