Custom fields wordpress


Несмотря на то, что некоторые плагины предлагают свои «готовые» функции для вывода custom fields в шаблонах Темы, существует еще много разных «вкусностей», о которых в Кодексе WordPress написано крайне скудно.

Что такое custom fields (произвольные поля) в WordPress?

Многие видели такой бокс в админ. панели при написании/редактировании поста или страницы:

Произвольное поле (custom field) состоит из ключа (key) и его значения (value), и с помощью произвольных полей можно вывести практически любую информацию на странице записи (post) или Страницы (Page). Например, в боковой колонке, в шапке или в подвале блога. По сути механизм произвольных полей дает нам свободу в организации и расположении информации на странице записи и помогает выйти за пределы поля для написания/редактирования записи — все зависит от потребностей, структуры блога и вашей фантазии. Другими словами, мы можем располагать часть контента за пределами Цикла (Loop).


В имени ключа можно использовать латиницу, кириллицу, цифры, нижнее подчеркивание и пробелы — как вам удобно. Дефис в названии ключа (key) лучше не использовать.

Регистр букв в имени ключа имеет значение!

Проведенные здесь коды будут работать как вне Цикла, так и внутри его. Однако следует учитывать, что если в исходном коде одиночной записи/страницы между Циклом и выводом произвольного поля есть еще Циклы (например вывод «Еще из этой рубрики:» с помощью get_posts или query_posts), то тут результат непредсказуем и значение такого произвольного поля выведется из какой-нибудь другой записи, упомянутой в таком дополнительном Цикле, но не из текущей записи.

Полезные ссылки:

  • Using_Custom_Fields
  • The_Loop
  • плагины для работы с произвольными полями: раз, два (wp 2.3.3 и ниже), три (wp 2.5 и выше)
  • Иерархия шаблонов WordPress — рекомендуется к ознакомлению всем, кто собрался курочить Тему, а ниже мы этим как раз и займемся 🙂 Если кратко, то за вывод одиночной записи отвечает шаблон single.php, а за вывод страницы — page.php

Пример 1

Работа с изображениями

Например, настроение (привет жж) можно вывести не только текстом, но и рисунком или смайликом. Для этого создаем папку moods в папке wp-content/uploads/, загружаем туда картинки happy.gif


, sorry.gif, eh.gif и т.п., теперь в записи можно создавать ключ mood

А в нужном месте шаблона single.php (в папке Темы) прописываем:

  <img src="<?php bloginfo('home') ?>/wp-content/uploads/moods/<?php echo get_post_meta($post->ID, 'mood', true) ?>.gif" alt="мое настроение" />  

Если выбрать при создании/редактировании записи ключ mood и вписать значение happy, то получается:
мое настроение

Пример 2

Это все хорошо, но если в какой-либо записи настроение не указывать, то ссылка на файл получится битая:
мое настроение

Поэтому логично для каждого произвольного поля перед выводом проверять наличие значения для него:

  <?php $image = get_post_meta($post->ID, 'mood', true); if($image !== '') { ?>  <img src="<?php bloginfo('home') ?>/wp-content/uploads/moods/<?php echo $image ?>.gif" alt="мое настроение" />  <?php } ?>  

Пример 3

Можно также проверять на наличие значения для произвольного поля mood, и если оно отсутствует, то выводить дефолтовую катринку mymood.gif:

  <?php $image = get_post_meta($post->ID, 'mood', $single = true); ?>  <?php if($image !== '') { ?>  <img src="<?php bloginfo('home') ?>/wp-content/uploads/moods/<?php echo $image; ?>" alt="мое настроение" />  <?php }   else { ?>  <img src="<?php bloginfo('home') ?>/wp-content/uploads/moods/mymood.gif" alt="без настроения" />  <?php } ?>  

Пример 4


Вариантов может быть множество, вот пример с выводом через произвольные поля картинки, css класса для img и alt. В отличие от предыдущего варианта тут мы будет указывать абсолютный урл картинки — для разнообразия, вы можете прописать урл к картинке как вам угодно: только имя файла happy, имя файла с расширением happy.gif или абсолютный урл http://site.ru/wp-content/uploads/moods/happy.gif — главное, чтобы в результате всех манипуляций собрался полный урл к картинке.

Первый шаг:

Получаем значения произвольных полей урл картинки, css класс и alt картинки (как видите, в ключах произвольных полей можно использовать не только латиницу, но и кириллицу и пробелы — как вам удобно):

  <?php $image = get_post_meta($post->ID, 'урл картинки', $single = true);  $image_class = get_post_meta($post->ID, 'css класс', $single = true);  $image_alt = get_post_meta($post->ID, 'alt картинки', $single = true); ?>  

Второй шаг:

Выводим значения произвольных полей, при этом перед выводом проверяем наличие значения для произвольного поля урл картинки


, т.к. бессмысленно выводить изображение с битой ссылкой (пустым значением поля урл картинки), а вот если у изображения будет отсутствовать заполненный alt или css класс — то тут в общем ничего страшного не случится.

  <?php if($image !== '') { ?>  <img src="<?php echo $image; ?>" alt="" /> class="<?php if($image_class !== '') { echo $image_class; } else { echo "alignleft"; } ?>"   alt="<?php if($image_alt !== '') { echo $image_alt; } else { echo the_title(); } ?>" />  <?php }  else { echo 'фото отсутствует'; } ?>  

В результате мы получаем: если значение для произвольного поля урл картинки существует (главное условие), то выводим картинку. При этом если заполнено поля css класс, то выводим его, если не заполнено, то css класс «по умолчанию» = alignleft. Аналогично с alt к картинке, если значение поля alt картинки существует, то выводим его, иначе вместо него выводится заголовок текущей записи.

Скриншоты:

Итак

Пример с выводом настроения — условный (ни разу не видела, чтобы кто-то в WordPress блоге выводил настроение, как в жж) и иллюстирует принцип работы с произвольными полями и в частности с картинками.

Пример 5

Пример чуть сложнее.

Допустим, мы хотим выводить в сайдбаре при просмотре одиночной записи (или страницы) ссылку, т.е. у нас будет 2 произвольных поля: урл ссылки и анкор ссылки. Анкор без ссылки — это просто текст, а вот ссылка без анкора — это уже нехорошо, поэтому будет проверять в первую очередь на существование значения ключа «анкор ссылки»:


  • если анкор существует, а урл — нет, то выведется только анкор (т.е. просто текст)
  • если анкор и урл существуют, то выведется полноценная ссылка
  • если анкора не существует, а урл заполнен, то не выведется ничего — кому нужна ссылка без текста?
  <?php  $url = get_post_meta($post->ID, 'url ссылки', true);  $ancor = get_post_meta($post->ID, 'анкор ссылки', true);  ?>  <?php if($ancor !== '') { ?>  <?php if($url !== '') { ?>  <a href="<?php echo $url ?>">  <?php } ?>  <?php echo $ancor ?>  <?php if($url !== '') echo '</a>'; ?>  <?php } ?>  

Пример 6

Один ключ и несколько значений

Custom fields wordpress Если у произвольного поля один ключ и несколько значений у этого ключа, то вышеописанные способы не подходят — выведется только первое значение ключа. Как может случиться, что у одного ключа получается несколько значений? Например, при использовании любого из плагинов для вывода custom fields в админ. панели можно создать список-множественный выбор значений произвольного поля, на картинке справа список значений ключа «В номере» создан посредством плагина Custom Write Panel (работает до wp 2.3.3 включительно, для wp 2.5 и выше есть аналог этого плагина — FreshPost).


Вот таким кодом можно вывести все значения для ключа «В номере» (обратите внимание на то, что «В номере» и «в номере» — это разные ключи, регистр букв имеет значение!), значения будут разделяться запятыми:

  <?php   $inroom = get_post_meta($post->ID, 'В номере', false);  if ($inroom[0]=='') { }  else{ echo implode(', ',$inroom); }   ?>  

UPD Другой вариант, значения ключа songs выводятся в виде ненумерованного списка:

  <?php $songs = get_post_meta($post->ID, 'songs', false); ?>  <h3>Слушаю треки:</h3>  <ul>  <?php foreach($songs as $song) { echo '<li>'.$song.'</li>'; }   </ul>  ?>  

Пример 7

Выводим nextgen gallery в боковой колонке

С помощью механизма произвольных полей можно вывести каждому посту свою галерею в боковой колонке. Что нам для этого надо? Создать галерею (речь идет о Nextgen Gallery) и посмотреть какой ID ей присвоен, затем создать ключ gallery-id и в значение записать ID галереи, все готово!

В sidebar.php, естественно, должен быть такой код (большое спасибо за него Максиму), который помимо всего прочего «страхует» нас от неправильного указания ID, который может состоят только из цифр, но не в коем случае букв:


  <?php $myid = $wp_query->post->ID;  $my_meta = get_post_custom_values( 'gallery-id', $myid );  if ( $my_meta) {  echo '<strong>Галерея</strong>: ';  foreach ( $my_meta as $val_key => $val_val )  $val_val = (int) trim( $val_val );  echo nggShowGallery($val_val);  } ?>  

Пример 8

Каждой одиночной записи — своя шапка, или картинка в боковой колонке или что угодно!

Если у записи (поста) не заполнено значение произвольного поля шапка (полный урл к картинке), то берется картинка-шапка header.jpg из папки img активной Темы, а если такое произвольное поле существует, то выводится индивидуальная картинка-шапка при просмотре этой записи вместо стандартной шапки:

  <?php   if (is_single() || is_page() ) {  $shapka = trim(get_post_meta($post->ID, 'шапка', true));  if ( strlen($shapka) > 0 )  echo '<img src="' . $shapka . '" alt="" width="530px" height="240px" />';  else echo '<img src="' . TEMPLATEPATH . '/img/header.jpg" alt="" width="530px" height="240px" />'; }  else { echo '<img src="' . TEMPLATEPATH . '/img/header.jpg" alt="" width="530px" height="240px" />'; }  ?>  

Пример 9

Дополнительные слова в title записи

Привожу полностью свой любимый title для WordPress, вывод доп. слов в заголовок одиночной записи (поста) осуществляется с помощью произвольного поля с ключом seo-title:


  <?php   if (is_home () ) { bloginfo('name'); }   elseif ( is_category() ) { single_cat_title(); }  elseif (is_single() ) { wp_title(' '); echo ' '; single_cat_title(); $key="seo-title"; echo get_post_meta($post->;ID, $key, true); }  elseif (is_search() ) { bloginfo('name'); echo " результаты поиска: "; echo wp_specialchars($s);}  elseif (is_tag() ) { echo "Тег: "; wp_title(' '); echo ' '; bloginfo('name'); }  else { wp_title(); }   ?>  

Пример 10

Вывод google map с помощью custom fields

Способ, описанный в этой статье Custom Fields & Google Maps API (англ.) я пробовала — отлично работает!
Суть его в том, что создается произвольное поле gps и в значение записывается координата маркера, например 43.743321,39.721069 для Сочи. Скриншоты смотрите в статье.

Пример 11

Цикл (Loop), основанный на custom fields

Из Кодекса WordPress пример Цикла, который выведет посты из рубрик с ID=1,2 и 3, у которых есть произвольное поле paragraf, посты будут отсортированы по алфавиту значений ключа paragraf:

  SELECT * FROM $wpdb->posts  LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)  LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)  LEFT JOIN $wpdb->;term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)  WHERE $wpdb->term_taxonomy.term_id = 1,2,3  AND $wpdb->term_taxonomy.taxonomy = 'category'  AND $wpdb->posts.post_status = 'publish'  AND $wpdb->postmeta.meta_key = 'paragraf'  ORDER BY $wpdb->postmeta.meta_value ASC  

Пример 12

Сортировка записей в соответствии со значением определенного ключа custom fields.


Этим решением с нами поделился Александр Мальцев (mayuxi).

Пример: у нас есть посты с произвольным полем rating, допустим, у записи «Привет, мир!» значение произ. поля rating равно 3, у записи «Как дила?» 69, а у записи «Ахтунг, мухтар» 1, тогда они выведутся в таком порядке:

  1. «Ахтунг, мухтар»
  2. «Привет, мир!»
  3. «Как дила?»
  <?php  usort($posts, 'rating_sort');  function rating_sort($a, $b) {  $ar = get_post_meta($a->ID, 'rating', true);  $br = get_post_meta($b->ID, 'rating', true);  if ($ar == $br) return 0;  return ($ar < $br) ? -1 : 1;  }  if (have_posts()) : while (have_posts()) : the_post();  ?>  Далее идет стандартный Цикл, примеры см. выше  

Еще примеры циклов с использованием custom fields смотрите в статье «Чекбокс «Опубликовать на главной»

Пример 13

Добавляем css к конкретной записи (при просмотре одиночной записи)

Такой код вставить сразу после <?php while (have_posts()) : the_post(); ?>


в index.php или в single.php — без условия if (is_single())

  <?php if (is_single()) { ?>  <?php $newcss = get_post_meta($post ->ID, 'post-css', true); ?>  <?php } // конец условия is_single ?>  

Произвольное поле: post-css, в значение пишем css правила, например:

body {background:#ff0000!important;} .post {color:Green!important; font-size:14px} .entry p strong {color:#ccc!important;}

Пример 14

Организуем посты в серии с помощью custom fields

Источник: WordPress Custom Fields: Listing A Series Of Posts

Что значит серия? Это когда несколько постов объединены в общий сет, и при просмотре одиночной записи из определенной серии выводятся все посты из этой серии. Аналог — плагины типа related posts. Отличие — плагины типа related posts как бы сами «решают» какие записи являются связанными (подходящими) для конкретного поста, а тут мы имеем полный контроль над тем, какие посты должны быть в конкретной серии.

Т.е. мы создаем произвольное поле Серия, а в значение ему пишем наше название серии.

Код можно вставить в sidebar.php

  <?php if (is_single() ) {   // проверяем принадлежит ли пост какой-нибудь серии  // получаем имя серии   ($series_name = get_post_meta($post->ID, 'Серия', $single = true);  // если пост в этой серии  if($series_name !== '') {  // выводим название серии  echo '<div class="single-offers"><h4>' . $series_name . ' — смотрите также:</h4>';  // формируем запрос в базу для вывода постов из этой серии  $query_string = "  SELECT *  FROM $wpdb->posts  LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)  WHERE $wpdb->postmeta.meta_key = 'Серия'  AND $wpdb->postmeta.meta_value = '$series_name'  AND $wpdb->posts.post_status = 'publish'  AND $wpdb->posts.post_type = 'post'  ORDER BY $wpdb->posts.post_date ASC";  // выводим список постов  $series_posts = $wpdb->get_results($query_string, OBJECT);  if ($series_posts):  echo '<ul>';  foreach ($series_posts as $post):  echo '<li>'; ?>  <a title="<?php echo the_title(); ?>" href="<?php echo the_permalink(); ?>">  <?php echo the_title(); echo '</a></li>';  endforeach;  echo '</ul></div>';  endif;  rewind_posts();  }  // все, закончили с постами в серии  }  // закончили условие is_single()  ?>  

Пример 15

Цикл, в котором выводим посты с определенными произвольными полями, т.е. список постов, у которых есть хотя бы одно из указанных произвольных полей (в примере использованы имена произвольных полей Links и MyData).

Источник: How to Only Retrieve Posts With Custom Fields

Думаю нет смысла дублировать здесь код, см. в конце статьи ссылку на загрузку файлов-примеров sidebar.php и functions.php «Downloadable Code for Posts and Custom Fields»

Пример 16

Разные сайдбары для записей (постов)

(условимся, что сайдбары в папке Темы существуют, предназначены для вывода в одном месте лейаута блога и отличаются друг от друга содержимым, пример названий: sidebar.php, sidebar-var2.php и sidebar-var3.php). См. в кодексе про get_sidebar.

Находим в файлах Темы вызов сайдбара:

и заменяем его на:

  <?php $sidebar = get_post_meta($post ->ID, "sidebar", true); get_sidebar($sidebar); ?>  

Теперь в каждой записи создаете произвольное поле sidebar, а в значение пишете ему часть имени (после sidebar-) того сайдбара, который хотите показывать при просмотре этой записи: var2 или var3. Если у одиночной записи нет произвольного поля sidebar, то выведется сайдбар «по-умолчанию» sidebar.php

Источник: WordPress hack: Choose the sidebar to use, post by post

Пример 17

Выводим что-либо в зависимости от значения определенного ключа custom field

  <?php $value = get_post_meta($post ->ID, 'hobbies', true);  if($value == 'gaming') {  echo '<a href="http://domain.tld/gaming/">Gaming Stuff</a>';  } elseif($value == 'sleeping') {  echo '<a href="http://domain.tld/sleeping/">Nap Supplies</a>';  } elseif($value == 'eating') {  echo '<a href="http://domain.tld/eating/">Dieting Advice</a>';  } else {  echo '<a href="http://domain.tld/">Home Page</a>';  }  ?>  

Пример 18

Выводим индивидуальный текст для more

Индивидуальный more (вместо стандартного «Читать далее») можно вывести несколькими способами, в том числе и с помощью произвольного поля. Вручную это делается так: <!--more Узнать чем дело закончилось!-->, но для этого нужно переключаться в режим «код» в виз. редакторе.

А вот способ с использованием custom field: ищем в single.php (файле, отвечающем за вывод одиночной записи) строчку

  <?php the_content("Читать далее »"); ?>  

и заменяем на:

  <?php $custommore = get_post_meta($post ->ID, 'custom_more', true); ?>  <?php if (!$custommore) { $custommore = 'Читать далее »'; } ?>  <?php the_content($custommore); ?>  

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

Пример 19

Выводим посты с определенным произвольным полем + условие для значения произвольного поля

Нашла в Кодексе новый параметр для произвольных полей в query_posts

meta_compare= оператор для meta_value=, по умолчанию ‘=‘, другие возможные значения ‘!=‘, ‘>‘, ‘>=‘, ‘<‘, и ‘<=

Примеры использования:

Вывод записей и страниц с ключем произвольного поля color и любым значением, кроме blue:

  <?php query_posts('post_type=any&meta_key=color&meta_compare=!=&meta_value=blue'); ?>  

Вывод записей с ключем miles и числовым значением, которое меньше чем 22 (на заметку: значение 99 будет больше, чем 100, т.к. по сути это не числа; выход: давать значения такие как : 001, 055, 099):

  <?php query_posts('meta_key=miles&meta_compare=<=&meta_value=22'); ?>  

Пример 20

Выводим посты с 2 определенными произвольными полями и их значениями

Источник: Customize Posts Order in WordPress via Custom Fields

Пример Цикла для вывода всех постов, которые одновременно содержат 2 произвольных поля и их определенные значения: ‘ключ1’ —> ‘значениеключа1’ и ‘ключ2’ —> ‘значениеключа2’

  <?php $querystr = "  SELECT wposts.*  FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2  WHERE wposts.ID = wpostmeta.post_id  AND wposts.ID = wpostmeta2.post_id  AND wpostmeta.meta_key = 'ключ1'  AND wpostmeta.meta_value = 'значениеключа1'  AND wpostmeta2.meta_key = 'ключ2'  AND wpostmeta2.meta_value = 'значениеключа2'  AND wposts.post_type = 'post'  AND wposts.post_status = 'publish'  ";  $pageposts = $wpdb->get_results($querystr, OBJECT);  if ($pageposts)  {  foreach ($pageposts as $post)  {  setup_postdata($post);  ?>  <!--вывод постов-->  <div>id="post-<?php the_ID(); ?>">  <h2><a title="Permanent Link to <?php the_title_attribute(); ?>" rel="bookmark" href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>  <div class="entry"><?php the_content('Read the rest of this entry »'); ?></div>  <p class="postmetadata">  <?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> |  <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?>  </div>  <!--закончили вывод постов-->  <?php } } ?>  

Нужные вещи

Плагин Mass Custom Fields Manager позволяет из админки массово управлять произвольными полями, больше не нужно открывать каждую запись / страницу чтобы внести изменения в custom filelds, с помощью этого плагина все делается на одной странице в админ. панели ВордПресса.

Про плагины, работающие с custom fields и облегчающие заполнение произвольных полей для записи / страницы я уже писала.

www.sonika.ru

Часть первая. Теория

Если чувствуете себя уверенно, можно сразу перейти ко второй части.

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

Функция — get_field()

Возвращает значение заданного поля.

Это очень универсальная функция. Ее можно использовать чтобы получить значение, вывести значение (через echo), и взаимодействовать со значением. Обратите внимание, что тип возвращаемой переменной будет соответствовать типу поля (для текстового поля — это будет строка, для изображения — массив, в некоторых случаях — это может быть многомерный массив). Источник

Параметры

<?php $field = get_field($field_name, $post_id, $format_value); ?>

Функция — the_field()

Отображает значение заданного поля. Эта функция аналогична выражению “echo get_field($field_name)”. Источник

Параметры

<?php the_field($field_name, $post_id); ?>

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

Часть вторая. Практическая

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

Текстовое поле, текстовый блок

<?php the_field('text'); ?>  <?php the_field('textarea'); ?>

Изображение

Базовый способ. Отображение картинки.

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

Продвинутый способ. Разбор массива по переменным.

<?php   $image = get_field('image');  if( !empty($image) ):       // vars     $url = $image['url'];     $title = $image['title'];     $alt = $image['alt'];     $caption = $image['caption'];      // thumbnail     $size = 'thumbnail';     $thumb = $image['sizes'][ $size ];     $width = $image['sizes'][ $size . '-width' ];     $height = $image['sizes'][ $size . '-height' ];      if( $caption ): ?>          <div class="wp-caption">      <?php endif; ?>      <a href="<?php echo $url; ?>" title="<?php echo $title; ?>">          <img src="<?php echo $thumb; ?>" alt="<?php echo $alt; ?>" width="<?php echo $width; ?>" height="<?php echo $height; ?>" />      </a>      <?php if( $caption ): ?>              <p class="wp-caption-text"><?php echo $caption; ?></p>          </div>      <?php endif; ?>  <?php endif; ?>

Упрощенный способ, когда нужно получить только конкретный размер изображения, и конкретный дополнительные параметры:

<?php   $image = get_field('image'); $size = 'full'; // (thumbnail, medium, large, full or custom size)  if( $image ) {      echo wp_get_attachment_image( $image, $size );  }  ?>

Файл

Простой способ. Вывод ссылки на файл.

<?php $myfile = get_field('file'); ?>  <a href="<?php echo $myfile['url']; ?>" >Download File</a>

Расширенный способ. Вывод ссылки, заголовка, подписи и описания файла.

<?php          $myfile = get_field('file');          if( !empty($myfile) ): ?>          <p>             <a href="<?php echo $myfile['url']; ?>" >                 Download File "<?php echo $myfile['title']; ?>"             </a><br>                          <?php echo $myfile['caption']; ?><br>              <?php echo $myfile['description']; ?>          </p>  <?php endif; ?>

Дебаг для поля с файлом

<?php   //Return value = Object, requires ACF 3.3.7+  $file = get_field('field_name');  // view array of data var_dump($file);  ?>

Календарь

Для вывода даты заданной через date picker, используем:

<?php /* *  Create PHP DateTime object from Date Piker Value *  this example expects the value to be saved in the format: yymmdd (JS) = Ymd (PHP) */  $date = DateTime::createFromFormat('Ymd', get_field('date_picker')); echo $date->format('d-m-Y');  ?>

Сортировка постов по дате заданной через поле выбора даты.

<?php  /* *  Order Posts based on Date Picker value *  this example expects the value to be saved in the format: yymmdd (JS) = Ymd (PHP) */  $posts = get_posts(array(     'meta_key' => 'custom_order', // name of custom field     'orderby' => 'meta_value_num',     'order' => 'ASC' ));  if( $posts ) {     foreach( $posts as $post )     {         setup_postdata( $post );          // ...      }      wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly }  /* *  Format examples */  $js = "yymmdd" $php = "Ymd"  $js = "dd/mm/yy" $php = "d/m/Y"  $js = "yy_mm_dd" $php = "Y_m_d"  ?>

Карта Google

Для отображения карты Google с маркером предлагаю использовать следующий код. Есть два варианта.

Первый способ, с официального сайта по документации по ACF

Первая часть. Отвечает только за генерацию карты Google.

<style type="text/css">  .acf-map {     width: 100%;     height: 400px;     border: #ccc solid 1px;     margin: 20px 0; }  </style> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script> <script type="text/javascript"> (function($) {  /* *  render_map * *  This function will render a Google Map onto the selected jQuery element * *  @type    function *  @date    8/11/2013 *  @since    4.3.0 * *  @param    $el (jQuery element) *  @return    n/a */  function render_map( $el ) {      // var     var $markers = $el.find('.marker');      // vars     var args = {         zoom        : 16,         center        : new google.maps.LatLng(0, 0),         mapTypeId    : google.maps.MapTypeId.ROADMAP     };      // create map                     var map = new google.maps.Map( $el[0], args);      // add a markers reference     map.markers = [];      // add markers     $markers.each(function(){          add_marker( $(this), map );      });      // center map     center_map( map );  }  /* *  add_marker * *  This function will add a marker to the selected Google Map * *  @type    function *  @date    8/11/2013 *  @since    4.3.0 * *  @param    $marker (jQuery element) *  @param    map (Google Map object) *  @return    n/a */  function add_marker( $marker, map ) {      // var     var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );      // create marker     var marker = new google.maps.Marker({         position    : latlng,         map            : map     });      // add to array     map.markers.push( marker );      // if marker contains HTML, add it to an infoWindow     if( $marker.html() )     {         // create info window         var infowindow = new google.maps.InfoWindow({             content        : $marker.html()         });          // show info window when marker is clicked         google.maps.event.addListener(marker, 'click', function() {              infowindow.open( map, marker );          });     }  }  /* *  center_map * *  This function will center the map, showing all markers attached to this map * *  @type    function *  @date    8/11/2013 *  @since    4.3.0 * *  @param    map (Google Map object) *  @return    n/a */  function center_map( map ) {      // vars     var bounds = new google.maps.LatLngBounds();      // loop through all markers and create bounds     $.each( map.markers, function( i, marker ){          var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );          bounds.extend( latlng );      });      // only 1 marker?     if( map.markers.length == 1 )     {         // set center of map         map.setCenter( bounds.getCenter() );         map.setZoom( 16 );     }     else     {         // fit to bounds         map.fitBounds( bounds );     }  }  /* *  document ready * *  This function will render each map when the document is ready (page has loaded) * *  @type    function *  @date    8/11/2013 *  @since    5.0.0 * *  @param    n/a *  @return    n/a */  $(document).ready(function(){      $('.acf-map').each(function(){          render_map( $(this) );      });  });  })(jQuery); </script>

Вторая часть. Выводит на карте единичный маркер.

<?php   $location = get_field('location');  if( !empty($location) ): ?> <div class="acf-map">     <div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>"></div> </div> <?php endif; ?>

Другой вариант второй части, для вывода нескольких маркеров на карте.

<?php if( have_rows('locations') ): ?>     <div class="acf-map">         <?php while ( have_rows('locations') ) : the_row();               $location = get_sub_field('location');              ?>             <div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>">                 <h4><?php the_sub_field('title'); ?></h4>                 <p class="address"><?php echo $location['address']; ?></p>                 <p><?php the_sub_field('description'); ?></p>             </div>     <?php endwhile; ?>     </div> <?php endif; ?>

Источник

rightblog.ru

Журнал изменений

5.7.10

Release Date — 16 January 2019

  • Fix — Fixed bug preventing metaboxes from saving if validation fails within Gutenberg.
  • Fix — Fixed bug causing unload prompt to show incorrectly within Gutenberg.
  • Fix — Fixed JS error when selecting taxonomy terms within Gutenberg.
  • Fix — Fixed bug causing jQuery sortable issues within other plugins.
  • Tweak — Improved loading translations by adding fallback from region to country when .mo file does not exit.
  • Tweak — Improved punctuation throughout admin notices.
  • Tweak — Improved performance and accuracy when loading a user field value.
  • Dev — Added filter ‘acf/get_locale’ to customize the locale used to load translations.
  • Dev — Added filter ‘acf/allow_unfiltered_html’ to customize if current user can save unfiltered HTML.
  • Dev — Added new data storage functions acf_register_store() and acf_get_store().
  • Dev — Moved from .less to .scss and minified all css.
  • i18n — Updated French translation thanks to Maxime Bernard-Jacquet.
  • i18n — Updated Czech translation thanks to David Rychly.

5.7.9

Release Date — 17 December 2018

  • Fix — Added custom metabox location (acf_after_title) compatibility with Gutenberg.
  • Fix — Added dynamic metabox check compatibility with Gutenberg.
  • Fix — Fixed bug causing required date picker fields to prevent form submit.
  • Fix — Fixed bug preventing multi-input values from saving correctly within media modals.
  • Fix — Fixed bug where acf_form() redirects to an incorrect URL for sub-sites.
  • Fix — Fixed bug where breaking out of a sub have_rows() loop could produce undesired results.
  • Dev — Added filter ‘acf/connect_attachment_to_post’ to prevent connecting attachments to posts.
  • Dev — Added JS filter ‘google_map_autocomplete_args’ to customize Google Maps autocomplete settings.

5.7.8

Release Date — 7 December 2018

  • Fix — Fixed vulnerability allowing author role to save unfiltered HTML values.
  • Fix — Fixed all metaboxes appearing when editing a post in WP 5.0.
  • i18n — Updated Polish translation thanks to Dariusz Zielonka.
  • i18n — Updated Czech translation thanks to Veronika Hanzlíková.
  • i18n — Update Turkish translation thanks to Emre Erkan.
  • i18n — Updated Portuguese language thanks to Pedro Mendonça.

5.7.7

Release Date — 1 October 2018

  • Fix — Fixed various plugin update issues.
  • Tweak — Added ‘language’ to Google Maps API url.
  • Dev — Major improvements to the acf.models.Postbox model.
  • Dev — Added JS filter ‘check_screen_args’.
  • Dev — Added JS action ‘check_screen_complete’.
  • Dev — Added action ‘acf/options_page/submitbox_before_major_actions’.
  • Dev — Added action ‘acf/options_page/submitbox_major_actions’.
  • i18n — Updated Portuguese language thanks to Pedro Mendonça

5.7.6

Release Date — 12 September 2018

  • Fix — Fixed unload prompt not working.
  • Dev — Reduced number of queries needed to populate the relationship field taxonomy filter.
  • Dev — Added ‘nav_menu_item_id’ and ‘nav_menu_item_depth’ to get_field_groups() query.
  • Dev — Reordered various actions and filters for more usefulness.
  • i18n — Updated Polish language thanks to Dariusz Zielonka

5.7.5

Release Date — 6 September 2018

  • Fix — Fixed bug causing multisite login redirect issues.
  • Fix — Fixed bug causing validation issues in older versions of Firefox.
  • Fix — Fixed bug causing duplicate Select2 instances when adding a widget via drag/drop.
  • Dev — Improved WPML compatibility by using $sitepress->get_current_language() instead of ICL_LANGUAGE_CODE.
  • Dev — Improved validation JS with new Validator model and logic.

5.7.4

Release Date — 30 August 2018

  • Fix — Fixed bug causing field groups to disappear when selecting a taxonomy term with WPML active.
  • Tweak — Added more Dark Mode styles.
  • Tweak — Improved DB upgrade prompt, functions and AJAX logic.
  • Tweak — Improved the «What’s New» admin page seen after DB Upgrade.
  • Dev — Added new location rules filters.

5.7.3

Release Date — 20 August 2018

  • New — Added Dark Mode styles for the Dark Mode Plugin.
  • New — Added «Value Contains» condition to the Select field type.
  • New — Added support for the WooCommerce product type dropdown to trigger «update metaboxes».
  • Tweak — Improved acf.screen model responsible for «updating metaboxes» when changing post data.
  • Tweak — Removed user fields from the multisite «Add New User» page.
  • Fix — Fixed bug preventing some tinymce customizations from working.
  • Fix — Fixed JS bug throwing «preference» error in console.
  • Dev — Added action ‘acf/enqueue_uploader’ triggered after the hidden «ACF Content» editor is rendered.

5.7.2

Release Date — 6 August 2018

  • Fix — Fixed bug preventing the Google Maps Field address from being customized.
  • Fix — Improved logic to request and cache plugin update information.
  • Fix — Fixed bug preventing JS initialization when editing widgets in accessibility mode.
  • Fix — Added missing $parent argument to term_exists() function when adding a new term via taxonomy field popup.
  • Fix — Fixed bug where nested Group Fields did not delete their values.
  • Fix — Fixed JS error thrown by localStorage if cookies are not enabled.
  • Dev — Bumped minimum WP version requirement to 4.4.
  • Dev — Added action ‘wp_nav_menu_item_custom_fields’ for compatibility with other plugins modifying the menu walker class.
  • Dev — Added ‘multiple’ to the allowed attributes for an email field.
  • Dev — Added new ACF_Ajax class for upcoming features.

5.7.1

  • Core: Minor fixes and improvements

5.7.0

  • Core: Major JavaScript updates
  • Core: Improved conditional logic with new types and more supported fields
  • Core: Improved localization and internationalization
  • Repeater field: Improved logic that remembers collapsed row states
  • Repeater field: Added support to collapse multiple rows (hold shift)
  • API: Improved lookup to find fields without a reference value
  • Language: Added Croatian translation — Thanks to Vlado Bosnjak
  • Language: Updated Italian translation — thanks to Davide Pantè
  • Language: Updated Romanian translation — thanks to Ionut Staicu
  • Language: Updated German translation — thanks to Ralf Koller
  • Language: Updated Arabic translation — thanks to Karim Ramadan
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça

5.6.10

  • Core: Minor fixes and improvements

5.6.9

  • User field: Added new ‘Return Format’ setting (Array, Object, ID)
  • Core: Added basic compatibility with Gutenberg — values now save
  • Core: Fixed bug affecting the loading of fields on new Menu Items
  • Core: Removed private (‘show_ui’ => false) post types from the ‘Post Type’ location rule choices
  • Core: Minor fixes and improvements
  • Language: Updated French translation — thanks to Maxime Bernard-Jacquet

5.6.8

  • API: Fixed bug causing have_rows() to fail with PHP 7.2
  • Core: Fixed bug causing «Add new term» form to hide after submit
  • Core: Minor fixes and improvements
  • Language: Updated German translation — thanks to Ralf Koller
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça
  • Language: Updated Arabic translation — thanks to Karim Ramadan
  • Language: Updated Spanish translation — thanks to Luis Rull Muñoz
  • Language: Updated Persian translation — thanks to Majix

5.6.7

  • Fixed an assortment of bugs found in 5.6.6

5.6.6

  • Accordion field: Added new field type
  • Tab field: Added logic to remember active tabs
  • WYSIWYG field: Fixed JS error in quicktags initialization
  • Core: Fixed issue preventing conditional logic for menu item fields
  • Core: Fixed issue preventing JS initialization for newly added menu items.
  • Core: Allow whitespace in input value (previously trimmed)
  • Core: Minor fixes and improvements
  • Language: Updated Italian translation — thanks to Davide Pantè
  • Language: Updated Brazilian Portuguese translation — thanks to Rafael Ribeiro
  • Language: Updated Dutch translation — thanks to Derk Oosterveld
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça
  • Language: Updated Persian translation — thanks to Kamel Kimiaei
  • Language: Updated Swiss German translation — thanks to Raphael Hüni
  • Language: Updated Arabic translation — thanks to Karim Ramadan

5.6.5

  • API: Added new ‘kses’ setting to the acf_form() function
  • Core: Added new ‘Admin Tools’ framework (includes design refresh)
  • Core: Minor fixes and improvements
  • Language: Update Ukrainian translation — thanks to Jurko Chervony
  • Language: Update Russian translation — thanks to Andriy Toniyevych
  • Language: Update Hebrew translation — thanks to Itamar Megged

5.6.4

  • Google Map field: Fixed bug causing invalid url to JavaScript library
  • WYSIWYG field: Fixed minor z-index and drag/drop bugs
  • Group field: Fixed bug causing incorrect export settings
  • Core: Fixed bug in ‘Post Taxonomy’ location rule ignoring selected terms during AJAX callback
  • Core: Fixed bug preventing a draft to validate with required fields
  • Language: Updated Italian translation — thanks to Davide Pantè
  • Language: Update Turkish translation — thanks to Emre Erkan
  • Language: Updated Chinese translation — thanks to Wang Hao
  • Language: Update Hebrew translation — thanks to Itamar Megged

5.6.3

  • Button Group field: Added new field type
  • Range field: Added missing ‘step’ attribute to number input
  • Range field: Added width to number input based on max setting
  • Basic fields: Added missing ‘required’ attribute to inputs
  • Basic fields: Removed empty attributes from inputs
  • API: Fixed get_fields() bug ignoring fields starting with an underscore
  • Core: Minor fixes and improvements
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça
  • Language: Updated French translation — thanks to Maxime Bernard-Jacquet
  • Language: Updated Finnish translation — thanks to Sauli Rajala
  • Language: Updated German translation — thanks to Ralf Koller

5.6.2

  • Range field: Added new field type
  • Clone field: Fixed bug causing value update issues for ‘seamless’ + widgets / nave menu items
  • Location: Added parent theme’s post templates to ‘post template’ location rule
  • Location: Fixed bug causing ‘nav menu’ location rule to fail during AJAX (add new item)
  • Core: Fixed PHP errors in customizer when editing non ACF panels
  • Core: Fixed bug casing backslash character to break fields / field groups
  • Core: Many minor bug fixes
  • Language: Updated Romanian translation — thanks to Ionut Staicu
  • Language: Updated Italian translation — thanks to Davide Pantè
  • Language: Update Turkish translation — thanks to Emre Erkan
  • Language: Updated Russian translation — Thanks to Алекс Яровиков
  • Language: Updated French translation — Thanks to Julie Arrigoni

5.6.1

  • Fixed an assortment of bugs found in 5.6.0

5.6.0

  • Link field: Added new field type
  • Group field: Added new field type
  • API: Improved have_rows() function to work with clone and group field values
  • Core: Added new location for Menus
  • Core: Added new location for Menu Items
  • Core: Added types to Attachment location rule — thanks to Jan Thomas
  • Core: Added «Confirm Remove» tooltips
  • Core: Updated Select2 JS library to v4
  • Core: Minor fixes and improvements

5.5.14

  • Core: Minor bug fixes

5.5.13

  • Clone field: Improved ‘Fields’ setting to show all fields within a matching field group search
  • Flexible Content field: Fixed bug causing ‘layout_title’ filter to fail when field is cloned
  • Flexible Content field: Added missing ‘translate_field’ function
  • WYSIWYG field: Fixed JS error when using CKEditor plugin
  • Date Picker field: Improved ‘Display Format’ and ‘Return Format’ settings UI
  • Time Picker field: Same as above
  • Datetime Picker field: Same as above
  • Core: Added new ‘remove_wp_meta_box’ setting
  • Core: Added constants ACF, ACF_PRO, ACF_VERSION and ACF_PATH
  • Core: Improved compatibility with Select2 v4 including sortable functionality
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça

5.5.12

  • Tab field: Allowed HTML within field label to show in tab
  • Core: Improved plugin update class
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça
  • Language: Updated Brazilian Portuguese translation — thanks to Rafael Ribeiro

5.5.11

  • Google Map field: Added new ‘google_map_init’ JS action
  • Core: Minor fixes and improvements
  • Language: Updated Swiss German translation — thanks to Raphael Hüni
  • Language: Updated French translation — thanks to Maxime Bernard-Jacquet

5.5.10

  • API: Added new functionality to the acf_form() function:
    • added new ‘html_updated_message’ setting
    • added new ‘html_submit_button’ setting
    • added new ‘html_submit_spinner’ setting
    • added new ‘acf/pre_submit_form’ filter run when form is successfully submit (before saving $_POST)
    • added new ‘acf/submit_form’ action run when form is successfully submit (after saving $_POST)
    • added new ‘%post_id%’ replace string to the ‘return’ setting
    • added new encryption logic to prevent $_POST exploits
    • added new acf_register_form() function
  • Core: Fixed bug preventing values being loaded on a new post/page preview
  • Core: Fixed missing ‘Bulk Actions’ dropdown on sync screen when no field groups exist
  • Core: Fixed bug ignoring PHP field groups if exists in JSON
  • Core: Minor fixes and improvements

5.5.9

  • Core: Fixed bug causing ACF4 PHP field groups to be ignored if missing ‘key’ setting

5.5.8

  • Flexible Content: Added logic to better ‘clean up’ data when re-ordering layouts
  • oEmbed field: Fixed bug causing incorrect width and height settings in embed HTML
  • Core: Fixed bug causing incorrect Select2 CSS version loading for WooCommerce 2.7
  • Core: Fixed bug preventing ‘min-height’ style being applied to floating width fields
  • Core: Added new JS ‘init’ actions for wysiwyg, date, datetime, time and select2 fields
  • Core: Minor fixes and improvements

5.5.7

  • Core: Fixed bug causing get_field() to return incorrect data for sub fields registered via PHP code.

5.5.6

  • Core: Fixed bug causing license key to be ignored after changing url from http to https
  • Core: Fixed Select2 (v4) bug where ‘allow null’ setting would not correctly save empty value
  • Core: Added new ‘acf/validate_field’ filter
  • Core: Added new ‘acf/validate_field_group’ filter
  • Core: Added new ‘acf/validate_post_id’ filter
  • Core: Added new ‘row_index_offset’ setting
  • Core: Fixed bug causing value loading issues for a taxonomy term in WP < 4.4
  • Core: Minor fixes and improvements

5.5.5

  • File field: Fixed bug creating draft post when saving an empty value
  • Image field: Fixed bug mentioned above

5.5.4

  • File field: Added logic to ‘connect’ selected attachment to post (only if attachment is not ‘connected’)
  • File field: Removed filesize() call causing performance issues with externally hosted attachments
  • File field: Added AJAX validation to ‘basic’ uploader
  • Image field: Added ‘connect’ logic mentioned above
  • Image field: Added AJAX validation mentioned above
  • True false field: Improved usability by allowing ‘tab’ key to focus element (use space or arrow keys to toggle)
  • Gallery field: Fixed bug causing unsaved changes in sidebar to be lost when selecting another attachment
  • API: Fixed add_row() and add_sub_row() return values (from true to new row index)
  • Core: Improved get_posts() query speeds by setting ‘update_cache’ settings to false
  • Core: Allowed ‘instruction_placement’ setting on ‘widget’ forms (previously set always to ‘below fields’)
  • Core: Removed ‘ACF PRO invalid license nag’ and will include fix for ‘protocol change’ in next release
  • Language: Updated French translation — thanks to Martial Parfait

5.5.3

  • Options page: Fixed bug when using WPML in multiple tabs causing incorrect ‘lang’ to be used during save.
  • Core: Added support with new get_user_locale() setting in WP 4.7
  • Core: Improved efficiency of termmeta DB upgrade logic
  • Core: Minor fixes and improvements

5.5.2

  • Tab field: Fixed bug causing value loading issues for field’s with the same name
  • Repeater field: Fixed bug in ‘collapsed’ setting where field key was shown instead of field label

5.5.1

  • Select field: Fixed bug preventing some field settings from being selected
  • Date picker field: Improved compatibility with customized values
  • Core: Added new ‘enqueue_datepicker’ setting which can be used to prevent the library from being enqueued
  • Core: Added new ‘enqueue_datetimepicker’ setting which can be used to prevent the library from being enqueued
  • Core: Minor fixes and improvements

5.5.0

  • True False field: Added new ‘ui’ setting which renders as a toggle switch
  • WYSIWYG field: Added new ‘delay’ setting which delays tinymce initialization until the field is clicked
  • WYSIWYG field: Added compatibility for WP 4.7 toolbar buttons order
  • Checkbox field: Added new ‘allow_custom’ and ‘save_custom’ settings allowing you to add custom choices
  • Select field: Fixed bug where Select2 fields did not correctly use the ‘allow null’ setting
  • Clone field: Fixed bug causing save/load issues found when 2 sub fields clone in the same field/group.
  • Flexible Content field: Improved popup style and validation messages
  • Google Map field: Prevent scroll zoom
  • Date picker field: Added better compatibility logic for custom ‘date_format’ setting found in version < 5.0.0
  • API: acf_form() ‘id’ setting is now used as ‘id’ attribute in

<

form> element
* Options page: Fixed incorrect redirect URL from a sub options page
* Field group: Added new ‘post_template’ location rule (requires WP 4.7)
* Core: Added support for the wp_termmeta table (includes DB upgrade)
* Core: Added new ‘select_2_version’ setting which can be changed between 3 and 4
* Core: Added new ‘enqueue_select2’ setting which can be used to prevent the library from being enqueued
* Core: Added new ‘enqueue_google_maps’ setting which can be used to prevent the library from being enqueued
* Core: Minor fixes and improvements
* Language: Updated Portuguese translation — thanks to Pedro Mendonça
* Language: Updated Norwegian translation — thanks to Havard Grimelid
* Language: Updated Swedish translation — thanks to Jonathan de Jong
* Language: Updated German translation — thanks to Ralf Koller
* Language: Updated Italian translation — thanks to Davide Pantè
* Language: Updated Swiss German translation — thanks to Raphael Hüni

5.4.8

  • Flexible Content field: Fixed bug in ‘layout_title’ filter preventing values being loaded correctly

5.4.7

  • Time Picker field: Fixed bug preventing default time from being selected
  • Date Picker field: Improved compatibility with unix timestamp values
  • File field: Fixed validation bugs when used as a sub field (multiple selection)
  • Select field: Fixed bug incorrectly allowing a disabled field (hidden by conditional logic) to save values
  • API: Added new add_sub_row() function
  • API: Added new update_sub_row() function
  • API: Added new delete_sub_row() function
  • Core: Fixed bug causing ‘sync’ issues with sub clone fields
  • Core: Minor fixes and improvements

5.4.6

  • Gallery field: Fixed bug where open sidebar fields were saved to post
  • Flexible Content field: Fixed bug causing Google map render issue within collapsed layout
  • Flexible Content field: Fixed bug during ‘duplicate layout’ where radio input values were lost
  • API: Fixed bug causing get_row(true) to return incorrect values
  • Core: Fixed bug where preview values did not load for a draft post
  • Core: Added notice when PRO license fails to validate URL
  • Core: Fixed bug where conditional logic would incorrectly enable select elements
  • Core: Minor fixes and improvements

5.4.5

  • API: Fixed bug in acf_form() where AJAX validation ignored ‘post_title’
  • API: Improved update_field() when saving a new value (when reference value does not yet exist)
  • Core: Added search input & toggle to admin field groups list
  • Core: Fixed bug where preview values did not load for a draft post

5.4.4

  • WYSIWYG field: Fixed JS error when ‘Disable the visual editor when writing’ is checked

5.4.3

  • WYSIWYG field: Fixed JS bug (since WP 4.6) causing conflicts with editor plugins
  • Google Maps field: Fixed JS error conflict with Divi theme
  • Radio field: Fixed bug (Chrome only) ignoring default values in cloned sub fields
  • Core: Fixed wp_get_sites() deprecated error (since WP 4.6) shown in network admin

5.4.2

  • API: Fixed bug preventing post_title and post_content values saving in acf_form()

5.4.1

  • API: Fixed bug causing get_fields('options') to return false
  • Core: Fixed bug causing get_current_screen() to throw PHP error
  • Core: Fixed bug causing ‘Preview Post’ to load empty field values

5.4.0

  • Clone field: Added new field type (https://www.advancedcustomfields.com/resources/clone/)
  • Gallery field: Removed ‘Preview Size’ setting and improved UI
  • Taxonomy field: Added compatibility to save/load terms to user object
  • Select field: Added new ‘Return Format’ setting
  • Radio field: Added new ‘Return Format’ setting
  • Checkbox field: Added new ‘Return Format’ setting
  • Page link field: Added new ‘Allow Archives URLs’ setting
  • Core: Fixed plugin update bug delaying updates
  • Core: Fixed bug when editing field settings in Chrome causing required setting to self toggle
  • Core: Improved speed and fixed bugs when creating and restoring revisions
  • Core: Minor fixes and improvements
  • Language: Updated Portuguese translation — thanks to Pedro Mendonça
  • Language: Updated Brazilian Portuguese translation — thanks to Augusto Simão
  • Language: Updated Dutch translation — thanks to Derk Oosterveld
  • Language: Updated Persian translation — thanks to Kamel
  • Language: Updated German translation — thanks to Ralf Koller
  • Language: Updated Swiss German translation — thanks to Raphael Hüni

View full changelog: https://www.advancedcustomfields.com/changelog/

ru.wordpress.org


You May Also Like

About the Author: admind

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.