Преобразование шорткодов в полях в админке

Advanced Custom Fields (ACF)

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

Шорткод

Пусть у нас на руках следующий шорткод:

add_shortcode( 'note', function () {
	return 'Юзер, я твой шорткод!';
} );

О шорткодах читайте в описании к функции add_shortcode().

Примеры

Во всех примерах используется функция apply_shortcodes(), которая с WP 5.4 пришла на смену функции do_shortcode(). Использовать можно любую из них.

Узнайте больше о фильтре load_field, чтобы работать с полями более эффективно.

Контент поля Сообщение (message)

function apply_shortcodes_for_acf_message( $field ) {
	$field['message'] = apply_shortcodes( $field['message'] );

	return $field;
}

add_filter( 'acf/load_field/type=message', 'apply_shortcodes_for_acf_message' );

Теперь, если сообщение задать как "Здесь будет содержимое шорткода: [note]", то выведется соответственно "Здесь будет содержимое шорткода: Юзер, я твой шорткод!".

Контент любого поля в атрибуте "Инструкция"

add_filter( 'acf/load_field', function ( $field ) {
	$field['instructions'] = apply_shortcodes( $field['instructions'] );

	return $field;
} );

Атрибуты других полей

Для создания динамики с помощью шорткодов вы можете поэкспериментировать с другими атрибутами поля. Пример массива настроек поля "Текст" (подавляющую часть настроек имеют и другие поля):

Array
(
	[ID] => 46
	[key] => field_5f5b7af1a1b31
	[label] => Какое-то поле
	[name] => какое-то_поле
	[prefix] => acf
	[type] => text
	[value] =>
	[menu_order] => 1
	[instructions] => Здесь будет содержимое шорткода: [note]
	[required] => 0
	[id] =>
	[class] =>
	[conditional_logic] => 0
	[parent] => 30
	[wrapper] => Array
		(
			[width] =>
			[class] =>
			[id] =>
		)

	[default_value] =>
	[placeholder] =>
	[prepend] =>
	[append] =>
	[maxlength] =>
	[_name] => какое-то_поле
	[_valid] => 1
)