По документации ACF, лицензию ACF PRO можно активировать двумя способами: ввести ключ на странице обновлений в админке или прописать его константой ACF_PRO_LICENSE в wp-config.php. Без активной лицензии плагин не получает обновления и не даёт пользоваться PRO-возможностями. Когда стенды поднимаются часто, второй способ удобнее: ключ задаётся одной командой WP-CLI, и этот шаг легко вставить в скрипт деплоя.
Константа ACF_PRO_LICENSE в wp-config.php
Константу ACF PRO поддерживает с версии 5.11. Плагин находит её сам, активирует ключ при первом заходе в админку, а если ключ в константе поменялся, отключает старую лицензию и включает новую. Если сайт уже активирован ключом из админки, а потом в wp-config.php прописали другой ключ, сработает то же правило.
define( 'ACF_PRO_LICENSE', 'ваш-ключ' );
Прописать ключ через WP-CLI
Править wp-config.php руками не нужно, для этого есть wp config set. Ключ лучше брать из переменной окружения, чтобы он не остался в истории shell:
wp config set ACF_PRO_LICENSE "$ACF_PRO_KEY" --type=constant --path=/var/www/example/htdocs
--type=constant говорит, что это define, а не переменная. Источник: developer.wordpress.org, wp config set.Сам ключ при этом оказывается в wp-config.php, поэтому этот файл не должен попадать в git, а права на него стоит ограничить, например 440 или 400.
Активировать сразу, без захода в админку
Константа срабатывает только при загрузке админки. Если сайт нужно активировать прямо в пайплайне, можно вызвать функцию ACF PRO через wp eval. Важная поправка к старым советам: acf_pro_update_license() только записывает ключ в базу и не активирует лицензию на сервере ACF. Активацию делает acf_pro_activate_license(), она отправляет ключ и адрес сайта на сервер ACF и возвращает результат:
wp eval 'var_export( acf_pro_activate_license( getenv( "ACF_PRO_KEY" ), true ) );'
Второй аргумент true отключает вывод уведомлений в админке, функция просто возвращает массив с success и message или WP_Error при ошибке связи. Это внутренние функции плагина, а не публичный API, поэтому после крупных обновлений ACF такой шаг стоит перепроверить.
Скрипт для стенда и CI
#!/bin/bash
set -euo pipefail
: "${ACF_PRO_KEY:?Задайте ACF_PRO_KEY в окружении}"
WP="wp --path=${WP_PATH:-/var/www/example/htdocs}"
$WP plugin activate advanced-custom-fields-pro
$WP config set ACF_PRO_LICENSE "$ACF_PRO_KEY" --type=constant
$WP eval 'var_export( acf_pro_activate_license( getenv( "ACF_PRO_KEY" ), true ) );'
$WP cache flush
Ключ хранится в секретах CI (GitHub Actions, GitLab CI, Ansible Vault), а не в репозитории. Если ACF PRO ставится через Composer, по инструкции ACF ключ служит логином в auth.json, а паролем адрес сайта, и этот файл тоже не коммитят.
Если активация не проходит
- Активен именно ACF PRO, а не бесплатный ACF.
- Сервер может ходить наружу по HTTPS к серверу ACF: проверьте файрвол и прокси.
- Ключ скопирован целиком: в нём нет пробелов, но есть буквы в разных регистрах, цифры и спецсимволы.
- Лицензия не истекла и не исчерпан лимит сайтов.
- Команда запущена с правильным
--pathк WordPress.
Если нужна помощь с ACF, кастомными блоками или админкой под контент, по моему прайс-листу «ACF и кастомные блоки» стоит от 15 000 ₽, а точечные доработки существующего сайта от 5 000 ₽.
В итоге для стендов проще всего прописать ключ константой ACF_PRO_LICENSE через wp config set, а если нужна активация сразу, вызвать acf_pro_activate_license через wp eval. Ключ берётся из переменной окружения или секретов CI и не попадает в git.