/ Плагины / Произвольные поля — ACF

Произвольные поля — ACF

HIT

30.09.2015

6589

Для добавления произвольных полей — нужно установить плагин Advanced Custom Fields.

Вывод различных типов полей

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

Вывод текстового поля, dolg — псевдоним поля

<?php $text = get_field('dolg'); ?> <?php if($text!="") { echo "<p><small>Должность: </small><strong>".$text."</strong></p>"; } ?>

Вывод изображения, placeholder — псевдоним поля

<?php $image = get_field('placeholder'); if( !empty($image) ): ?> <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" /> <?php endif; ?>

Вывод произвольных полей в шаблоне category.php

Вывод текстового поля в шаблоне category.php имеет небольшие особенности.

Надо выводить после конструкции:

<?php // номер рубрики $category_id = get_query_var( 'cat' ); // номер текущей страницы $page = get_query_var( 'paged' ); // данные о текущей категории $category = get_category( $category_id ); // данные о дочерних рубриках $children_categories = get_categories( "parent={$category_id}" ); ?>
<?php $text = get_field("dolg", 'category_'.$category_id); ?> <?php if($text!="") { echo "<p><small>Должность: </small><strong>".$text."</strong></p>"; } ?>

Вывод изображения категории
Если нет, изображения — выводить placeholder (не обязательно)

<?php if($imgcat1=get_field("mini-thumb",'category_'.$category_id)) : ?>
<div style="overflow: hidden;"><div id="post-div-pic" style="background-image: url(<?=$imgcat1['sizes']['large']?>);"></div></div>
<?php else: ?>
<div style="overflow: hidden;"><div id="post-div-pic" style="background-image: url(<?php bloginfo('template_url'); ?>/images/img-default-full.jpg);"></div></div>
<?php endif; ?>

Вывод полей в пользовательских таксономиях

Где-то вначале должен быть запрос

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );

и после этого код вывода изображения

<?php if($imgcat1=get_field("mini-thumb",$term)) : ?>
<div style="overflow: hidden;"><div id="post-div-pic" style="background-image: url(<?=$imgcat1['sizes']['large']?>);"></div></div>
<?php endif; ?>

Редактирование групп полей (шаблонов дополнительных полей)

Имена полям присваивать только английскими буквами.
Существует несколько вариантов автоформатирования полей: 1) без форматирования (тэги игнорируются), 2) без форматирования с 3) переносом строк, с форматированием (тэги интерпретируются).

Поле истина/ложь

Тип поля истина/ложь в зависимости от того ставим мы галку или нет дает возможность включать какую-либо функцию, конструкции php.

<?php if( get_field('thumb-background') ) : ?> галка стоит <?php else : ?> галка отсутствует <?php endif; ?>

Проверка функции

Можно сделать чтоб wordpress проверял есть ли данная функция, т.е. если отключить плагин ACF, то WP в местах вызова функций будет выдавать ошибку, избежать этого можно обернув такие функции условием

<?php if (function_exists('get_field')): ?> <?php endif; ?>

При этом (отключение плагина ACF) некоторые дополнительные поля все равно будут работать (Например: миниатюра категории)

Возможные проблемы

Не работает панель визуального редактора.

В моем случае проблема решилась легко — в панели пользователя был отключен визуальный редактор.

Удаление ACF

Когда нужно удалить плагин ACF, но на сайте уже много страниц использующих созданные доп. поля, то нужно переопределить их на стандартные вызовы WP.

Meta_key полей используются те которые заданы при создании полей ACF. Например поля со слагом advantages, в БД будут так и записаны. Это относится и к post_meta и к term_meta.

Нужно выводить поля в шаблонах традиционным способом:

$advantages = get_post_meta($post->ID, 'advantages', 1);

А в админ части выводить эти поля для возможности дальнейшего редактирования:

// Произвольное поле Преимущества
add_action('admin_init', 'wysiwyg_register_advantages_box');
function wysiwyg_register_advantages_box() {
	add_meta_box('advantages_wysiwyg_id', __('Преимущества', 'wysiwyg') , 'advantages_wysiwyg', 'post');
}
 
function advantages_wysiwyg($post) {
	$content = get_post_meta($post->ID, 'advantages', true);
	wp_editor($content , 'advantages', array(
		"media_buttons" => true
	));
}
 
function advantages_wysiwyg_save_postdata($post_id) {
	if (isset($_POST['advantages'])) {	
		if (!empty($_POST['advantages'])) {
			$data = $_POST['advantages'];
			update_post_meta($post_id, 'advantages', $data);
		} else {
			delete_post_meta($post_id, 'advantages', $data);
		}
	}		
}
 
add_action('save_post', 'advantages_wysiwyg_save_postdata');

После удаления плагина в БД останется много мусора. У каждого созданного поля есть клон, который содержал связь — их нужно удалить. Например у поля advantages в БД есть столько же полей _ advantages. Удаляем их командами:

DELETE FROM `wp_postmeta` WHERE `meta_key` = '_advantages'; // для post_meta
DELETE FROM `wp_termmeta` WHERE `meta_key` = '_mini-thumb'; // для term_meta
[site-socialshare]
  • Комментарии
  • Вложения

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

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

Произвольные поля — ACF
Fancybox для контента
Рекомендации для васFancybox для контентаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.