Как создать свой блок произвольных полей в редакторе

Как создать свой блок произвольных полей в редакторе | n-wp.ru

Я уже рассказывал об одном из вариантов плагина Custom Field GUI, позволяющем вставить в редактор поста блок нужных вам произвольных полей.

Однако можно создать свой блок произвольных полей и снабдить их удобными формами ввода и выбора значений без использования плагинов. Такой блок можно применять там, где нужно упростить работу авторов с произвольными полями, сократив и ограничив варианты ввода их значений. Давайте рассмотрим создание такого блока на примере пользовательского блока произвольных полей, который я использую в одном из своих блогов – блока полей, отвечающих за вывод и расположение рекламной ссылки (постового).

Как создать свой блок произвольных полей в редакторе

Как видите, для создания постового используются четыре произвольных поля, значения которых его формируют: текст до ссылки + анкор + ссылка + текст после ссылки. Значения этих произвольных полей являются текстом, который вводит пользователь, и они каждый раз бывают разными, либо вообще отсутствуют, а это значит, что для ввода нужно использовать текстовые формы. В дополнение к ним есть еще два произвольных поля, с помощью которых задается расположение постового в статье, причем они имеют заранее заданные значения, которые пользователю нужно только лишь выбрать. Значит значения этих произвольных полей выбираются пользователем с помощью специальных форм – радио-кнопок или выпадающего меню.

Чтобы создать такой блок произвольных полей, нужно вставить код в файл functions.php.

Создание блока

Чтобы создать блок, вставьте в файл functions.php:

add_action('admin_init', 'my_extra_fields', 1);

function my_extra_fields() {
    add_meta_box( 'extra_fields', 'Рекламная ссылка', 'extra_fields_box_func', 'post', 'normal', 'high'  );
}

Добавление полей

Для отображения текстовых полей, радио-кнопок и выпадающего меню, добавьте в вышеуказанному коду:

function extra_fields_box_func( $post ){
?>
        
	

размещение ID, 'ads_select', 1); ?>
если выбрано вручную, то расположить ID, 'ads_position', 1); ?> ---- <option value="top" >вверху <option value="middle" >в центре <option value="bottom" >внизу <option value="hidden" >скрытно

<input type="hidden" name="extra_fields_nonce" value="" /> <?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);
	}
	return $post_id;
}

Эта часть кода проверяет, имеет ли право текущий пользователь редактировать пост, заполнено ли произвольное поле, и если оно заполнено, то сохраняет его значение. Если значение произвольного поля помечено приставкой extra, то такое произвольное поле будет создано в любом случае, даже если оно будет пустым, остальные же произвольные поля будут созданы и сохранены только если они будут заполнены. Эта проверка позволит удалять пустые и не нужные произвольные поля, оставляя только те, которые относятся к выводу рекламной ссылки и заполнены данными.

Код полностью

add_action('admin_init', 'my_extra_fields', 1);

function my_extra_fields() {
    add_meta_box( 'extra_fields', 'Рекламная ссылка', 'extra_fields_box_func', 'post', 'normal', 'high'  );
}

function extra_fields_box_func( $post ){
?>
	

размещение ID, 'ads_select', 1); ?>
если выбрано вручную, то расположить ID, 'ads_position', 1); ?> ---- <option value="top" >вверху <option value="middle" >в центре <option value="bottom" >внизу <option value="hidden" >скрытно

<input type="hidden" name="extra_fields_nonce" value="" /> $value ){ if( empty($value) ) continue delete_post_meta($post_id, $key); update_post_meta($post_id, $key, $value); } return $post_id; }

Таким образом можно создавать пользовательские блоки с произвольными полями, с помощью которых удобно вводить значения полей или выбирать их из уже установленных. Можно создавать столько блоков, сколько вам нужно, и каждый из них может иметь собственную структуру. Видимость этих блоков можно устанавливать стандартно в настройках экрана.

Как создать свой блок произвольных полей в редакторе

В написании этого материала мне помогла статья Блок произвольных полей в админке WordPress своими руками. В ней так же рассматривается вариант использования чекбоксов, но с ними не все так гладко, есть нарекания в работе, поэтому я сознательно исключил этот вид переключателей из блока произвольных полей.

Подобный блок произвольных полей удобен еще и тем, что сохраняет все значения произвольных полей, а вот в плагине MaxSite – Произвольные поля возникает хоть и не критическая, но все же ошибка, доставляющая неудобства при дальнейшем редактировании постов – не все значения сохраняются, некоторые приходится вводить заново, на что указал в одном из своих вопросов sk8er.

Автор tiaurus 2182 Articles
Являюсь создателем n-wp.ru — блога о WordPress для новичков. Мне интересно многое, поэтому еще я сделал 123-box.ru — блог о программах для Windows, и tiaurus.info — блог о красоте.

5 Комментарии

  1. А как можно вызвать стандартный блок произвольных полей для определенной страницы по её ID?

    • Произвольное поле – это дополнительные данные, которые вы можете ввести, создавая или редактируя пост. Потом эти данные вы можете использовать, например, выводить их на странице поста.

      Произвольное поле можно создать, и добавить в него данные, в редакторе постов в админке. Для этого в редакторе нужно открыть панель Настройки экрана, и отметить чекбокс Произвольные поля.

      Чтобы получить значение произвольного поля, зная ID поста, можно использовать функцию get_post_meta или get_post_custom_values.

      • Я имел ввиду можно ли как то вызвать стандартный блок редактирования произвольных полей для определенной страницы по её ID, см.скрыншот.

  2. Здравствуйте, подскажите, пожалуйста, хочу использовать такое решение ещё и для вывода блоков перелинковки в середине текста с ссылкой на запись, анкором и миниатюрой записи, на которую ведет ссылка. Можно подключить вывод миниатюры по вставленной ссылке? Спасибо!

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*