Программное добавление пользовательских (кастомных) полей в статью Wordpress

Updated 25 June 2022

Статья о том, как мы можем через код PHP и шаблоны добавить вывод значений произвольных (кастомных) полей на сайт WordPress.

Что такое произвольные поля

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

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

Кроме того, через произвольные поля можно делать очень многое. Из простых примеров, которые вы найдете в других статьях про поля – это добавление поля “настроение”. Или блок, где перечислен весь коллектив, который имеет отношение к какой-либо статье на сайте.

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

Сам блок добавления кастомного поля в админке при добавлении записи выглядит примерно так:

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

Блок для добавления полей не показывается

Первое и самое важное с чем можно столкнуться – это с тем, что блок “Произвольные поля” (Custom Fields – см. скрин выше) не отображается в админке WordPress при добавлении “Записи” (Post).

Здесь есть два варианта почему блок не отображается:

  1. Блок для добавления произвольных полей не включен в настройках
  2. Установлен плагин ACF, который отключает базовые произвольные поля

Вариант 1

Здесь всё достаточно просто. В редакторе Gutenberg и в Классическом редакторе WordPress есть настройки, которые помогут включить отображение блока “Произвольные поля” при добавлении Записи.

Для классического редактора мы в самом верху жмем на “Параметры экрана” и в появившемся окне ставим нужную галочку напротив “Произвольные поля”.

Всё. Закрываем “Настройки экрана” и продолжаем работать.

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

В Гутенберге в правом верхнем углу кликаем на иконку с тремя вертикальными точками. Выбираем “Предпочтения” (Options).

Затем выбираем “Панели” (Panels) и в “Дополнительно” (Additional) видим переключатель включения “Произвольные поля” (Custom Fields):

Теперь блок с добавлением полей должен появиться в админке при добавлении записей.

При этом, еще раз подчеркну, это работает, если у вас не установлен плагин ACF (Advanced Custom Fields). Если у вас установлен плагин ACF, то переходим ко второму варианту.

Вариант 2

Вообще, при наличии плагина ACF я бы не рекомендовал ничего делать и добавлял бы кастомные (произвольные) поля только через этот плагин. Но если вам прям так хочется, то идем дальше.

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

Если вам такое не нравится и мы хотим включить поля обратно, то в functions.php темы добавляем строчку:

add_filter('acf/settings/remove_wp_meta_box', '__return_false');

Теперь блок с добавление кастомных полей должен появиться.

Мое мнение, что как только вы познакомитесь с ACF, то будете использовать только это плагин, т.к. он перекрывает почти любые потребности при разработке сайтов на WordPress.

Обычный метод вывода значений кастомных полей

Внимание! В данном случае мы не используем ACF, а работаем со стандартным блоком “Настраиваемых полей” на сайте WordPress.

Чтобы вывести поле на странице Записи мы делаем следующие шаги:

  1. Добавляем функционал вывода произвольного поля в теме WordPress
  2. Добавляем произвольное поле с названием и содержимом в админке
  3. Публикуем статью
  4. Проверяем запись и вывод поля во фронтенде

Так как у нас задача добавления “Кастомного поля” с названием “Ссылка на оригинал”, то мы добавим поле original и вывод этого поля в файле single.php темы WordPress.

Для вывода поля в теме мы в single.php в цикле вставляем:

<?php while ( have_posts() ) : the post(); ?> // Начало Цикла

    <?php echo get_post_meta($post->ID, 'original', true); ?>

<?php endwhile; ?> // Конец цикла

Теперь мы просто добавляем поле original в админке при добавлении записи и обновляем Запись.

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

<?php 
    $originalLink = get_post_meta($post->ID, 'original', true);

    if ($originalLink) {
        echo '<br><small><a href="' . $originalLink . '" target="_blank" rel="noopener nofollow">Ссылка на оригинал</a></small>';
    }

На сайте WP-kama пример привожу ниже.

Цитата: “Пример ниже показывает, как использовать функцию для того, чтобы получить значение произвольного поля thumb, в значении которого сохраняется ссылка на картинку-миниатюру, для того чтобы получить эту ссылку и использовать её в шаблоне”.

<?php if ( $thumb = get_post_meta( $post->ID, 'thumb', true ) ) : ?>
	<a href="<?php the_permalink() ?>" rel="bookmark">
		<img class="thumb" src="<?php echo $thumb ?>" alt="<?php the_title(); ?>" />
	</a>
<?php endif; ?>

Вывод значений полей через плагин ACF

Здесь все довольно просто, если вы знакомы с плагином Advanced Custom Fields (ACF). Плагин довольно простой, но очень функциональный. Алгоритм действия с этим плагином почти такой же как и без него:

  1. Добавляем плагин ACF через админку
  2. Активируем плагин
  3. Добавляем “Группу полей” в настройках ACF
  4. Добавляем произвольное поле с названием и содержимом в “Группе полей”
  5. Добавляем функционал вывода произвольного поля в теме WordPress
  6. Публикуем статью
  7. Проверяем запись и вывод поля во фронтенде

Здесь я не буду объяснять как устанавливать и активировать плагин, этого мы коснемся в ближайших публикациях. После того как с плагином всё хорошо – создаем “Группу полей” и добавляем “Произвольное поле”.

На скриншоте выше видно, что мы создали группу полей “Поля для статей” и в этой группе мы добавили поле “Ссылка на оригинал” со слагом original_link и с условием:

Тип записи -> Равно -> Запись

Теперь при добавлении статьи мы увидим блок:

Добавляем значение в нужное поле и обновляем запись. Теперь остается только вывести значение данного поля на фронтенд через добавление кода в файл single.php темы WordPress.

В ACF есть две основных функции для вывода значений полей – the_field() и get_field(). Мы в цикле сначала проверим наличие нужного нам поля, а затем в случае его наличия выведем значение во фронтенд.

<?php while ( have_posts() ) : the post(); ?> // Начало Цикла

<?php 
    $originalLink = get_field('original_link');
    if ($originalLink) {
        echo '<br><small><a href="' . $originalLink . '" rel="noopener nofollow" target="_blank">Ссылка на оригинал</a></small>';
    }

<?php endwhile; ?> // Конец цикла

Все значения сохраняются как “родное” для WordPress post_meta (при сохранении записи), и хотя вы можете использовать “родную” функцию WP get_post_meta(), лучше использовать соответствующую функцию ACF, например get_field(). Потому что ACF отформатирует значение в зависимости от типа поля и сделает разработку быстрее и проще!

Всё. Мы выполнили поставленную мини-задачу – создали “Произвольное поле” и вывели его на сайте для показа пользователям.

Published 2 June 2022
Category: Блог
Tags: ,

Leave a Reply

Your email address will not be published.