Для добавления произвольных полей — нужно установить плагин 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) некоторые дополнительные поля все равно будут работать (Например: миниатюра категории)
Возможные проблемы
В моем случае проблема решилась легко — в панели пользователя был отключен визуальный редактор.
Мне пришлось добавлять перед значениями невидимый символ ­. Этот символ сохраняется если даже переключить с html-редактора на визуальный. А символ при этом исчезает.
Удаление 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]

