В современных веб-проектах QR-коды становятся всё популярнее для быстрого доступа к информации, ссылкам или контактам. В WordPress нередко возникает задача динамически генерировать QR-коды для страниц, товаров, купонов или пользовательских данных. В этой статье мы рассмотрим, как создать динамические QR-коды в WordPress с помощью PHP, используя библиотеки и примеры кода.
Почему стоит использовать динамические QR-коды в WordPress
Динамические QR-коды отличаются от статичных тем, что содержат не зашитую в коде информацию, а ссылку или идентификатор, который может меняться или вести на динамический ресурс. Это удобно, например, для маркетинговых акций, персонализированных ссылок или отслеживания переходов.
В WordPress динамические QR-коды позволяют:
- Автоматически генерировать коды для новых страниц и постов.
- Встраивать QR-коды в письма или на страницы без ручного создания.
- Обновлять содержимое, на которое ссылается QR-код, без изменения самого изображения.
Варианты реализации генерации QR-кодов на PHP
Для генерации QR-кодов на PHP существуют готовые библиотеки. Самая популярная и простая в использовании — Endroid QR Code. Она поддерживает разные форматы и параметры кодов.
Другие варианты:
phpqrcode— легковесная библиотека без сторонних зависимостей.Simple Qrcode— обёртка для Laravel, но может использоваться и в чистом PHP.
Для WordPress удобнее всего использовать endroid/qr-code, так как она позволяет гибко управлять стилем и размером QR-кода.
Установка библиотеки Endroid QR Code в WordPress
Для работы с Composer в WordPress рекомендуется использовать плагин WPComposer от WPSHOP. Это позволит удобно интегрировать сторонние библиотеки.
После установки WPComposer выполните в терминале команду:
composer require endroid/qr-codeТеперь библиотека доступна для использования в вашем коде.
Пример функции для генерации QR-кода в WordPress
Создадим функцию wpcoder_generate_qr_code(), которая будет принимать URL и возвращать путь к PNG-файлу с QR-кодом.
function wpcoder_generate_qr_code($url, $size = 300) {
if (!class_exists('\Endroid\QrCode\QrCode')) {
return new WP_Error('missing_library', 'Библиотека Endroid QR Code не установлена');
}
$upload_dir = wp_upload_dir();
$dir = $upload_dir['basedir'] . '/wpcoder-qr';
if (!file_exists($dir)) {
wp_mkdir_p($dir);
}
$filename = $dir . '/' . md5($url) . '.png';
if (!file_exists($filename)) {
$qrCode = new \Endroid\QrCode\QrCode($url);
$qrCode->setSize($size);
$qrCode->writeFile($filename);
}
return str_replace($upload_dir['basedir'], $upload_dir['baseurl'], $filename);
}Эта функция кэширует результат в папке uploads, чтобы не генерировать QR-код заново при каждом вызове.
Использование функции в шаблоне WordPress
Допустим, нужно вывести QR-код для текущей записи. В файле шаблона можно добавить:
global $post;
$url = get_permalink($post->ID);
$qr_code_url = wpcoder_generate_qr_code($url);
echo '<img src="' . esc_url($qr_code_url) . '" alt="QR-код" width="300" height="300" />';Так вы получите динамический QR-код с ссылкой на текущую страницу.
Автоматическая вставка QR-кодов в контент с помощью шорткода
Для удобства добавим шорткод [wpcoder_qr], который будет генерировать QR-код для текущей страницы или для указанного URL:
function wpcoder_qr_shortcode($atts) {
$atts = shortcode_atts(array(
'url' => '',
'size' => 300
), $atts, 'wpcoder_qr');
$url = $atts['url'] ?: get_permalink();
$size = intval($atts['size']);
$qr_code_url = wpcoder_generate_qr_code($url, $size);
if (is_wp_error($qr_code_url)) {
return '<span>Ошибка генерации QR-кода</span>';
}
return '<img src="' . esc_url($qr_code_url) . '" alt="QR-код" width="' . $size . '" height="' . $size . '" />';
}
add_shortcode('wpcoder_qr', 'wpcoder_qr_shortcode');Теперь можно вставлять в записи и страницы [wpcoder_qr] или [wpcoder_qr url="https://example.com" size="200"].
Оптимизация и кеширование QR-кодов
Генерация QR-кодов — ресурсозатратная операция. В примерах выше реализовано простое кеширование в файловой системе WordPress. Для проектов с большим трафиком можно:
- Использовать CDN для доставки изображений.
- Генерировать QR-коды заранее при сохранении записей через хук
save_post. - Удалять устаревшие QR-коды при изменении URL.
Пример генерации QR-кода при сохранении записи:
function wpcoder_generate_qr_on_save($post_id) {
if (wp_is_post_revision($post_id)) {
return;
}
$url = get_permalink($post_id);
wpcoder_generate_qr_code($url);
}
add_action('save_post', 'wpcoder_generate_qr_on_save');Дополнительные возможности и настройки
Библиотека Endroid QR Code позволяет задавать:
- Цвета и фон QR-кода.
- Угол поворота и отступы.
- Добавление логотипа в центр кода.
Чтобы добавить логотип, используйте метод setLogoPath():
$qrCode->setLogoPath(WP_CONTENT_DIR . '/uploads/logo.png');Это удобно для брендирования QR-кодов на вашем сайте.
Рекомендации по безопасности
При генерации QR-кодов убедитесь, что URL безопасен и не содержит вредоносных данных. Используйте встроенные функции WordPress для валидации и очистки входных данных, например esc_url().