В WordPress стандартный идентификатор записи — это числовой post ID, который используется внутри системы. Однако в ряде случаев, особенно при интеграции с внешними сервисами, API, или для удобной фильтрации данных, требуется добавить уникальный идентификатор другого формата, например, строковый UUID или уникальный символьный код. В этой статье мы подробно разберём, как добавить уникальный ID к постам WordPress, как сохранить его, вывести и использовать в фильтрах и запросах.
Зачем нужен уникальный ID к постам WordPress
Стандартный post ID — это целочисленный автоинкрементный ключ, который отлично работает внутри WordPress. Но в некоторых случаях он неудобен или недостаточно информативен:
- При интеграции с внешними системами, где нужен уникальный ключ в формате UUID или другого стандарта.
- Для создания публичных ссылок, где не хочется показывать последовательные числа.
- Для удобной фильтрации и поиска по произвольным уникальным кодам.
- Для дополнительной безопасности — скрыть реальные ID записей.
Добавление уникального ID позволяет расширить функционал сайта без изменения ядра WordPress и с минимальной нагрузкой.
Как добавить уникальный ID посту при сохранении
Для начала нам нужно автоматически генерировать уникальный ID при создании новой записи и сохранять его в мета-поле. В этом примере мы используем UUID версии 4 — универсальный уникальный идентификатор, который практически гарантирует уникальность.
Добавьте следующий код в файл functions.php вашей темы или в пользовательский плагин:
function wpcode_generate_uuid4() {
$data = random_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // версия 4
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // вариант
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
function wpcode_save_unique_post_id($post_id, $post, $update) {
if ($update) {
return; // не меняем при обновлении
}
if (get_post_meta($post_id, '_wpcode_unique_id', true)) {
return; // уже есть уникальный ID
}
$uuid = wpcode_generate_uuid4();
update_post_meta($post_id, '_wpcode_unique_id', $uuid);
}
add_action('wp_insert_post', 'wpcode_save_unique_post_id', 10, 3);Этот код генерирует UUID при создании новой записи и сохраняет его в метаполе _wpcode_unique_id. При обновлении записи ID не изменяется, что важно для сохранения целостности данных.
Как вывести уникальный ID в шаблоне поста
Теперь, когда у каждой записи есть уникальный идентификатор, можно вывести его на странице поста. Для этого в файле single.php или любом другом шаблоне поста добавьте следующий код:
$unique_id = get_post_meta(get_the_ID(), '_wpcode_unique_id', true);
if ($unique_id) {
echo '<p>Уникальный ID записи: <code>' . esc_html($unique_id) . '</code></p>';
}Так посетители увидят уникальный идентификатор записи, который можно использовать для ссылок, поддержки или интеграций.
Использование уникального ID в WP_Query для фильтрации
Часто нужно найти запись по уникальному ID, например, в REST API, AJAX-запросах или пользовательских фильтрах. Для этого можно использовать мета-запрос:
$args = [
'post_type' => 'post',
'meta_query' => [
[
'key' => '_wpcode_unique_id',
'value' => $requested_uuid,
'compare' => '='
]
]
];
$query = new WP_Query($args);Так вы получите пост с нужным уникальным идентификатором. Можно применять подобную логику в REST API или AJAX для поиска.
Пример AJAX поиска записи по уникальному ID
Добавим обработчик AJAX, который возвращает заголовок поста по уникальному ID:
function wpcode_ajax_get_post_by_uuid() {
check_ajax_referer('wpcode_nonce', 'nonce');
$uuid = isset($_POST['uuid']) ? sanitize_text_field($_POST['uuid']) : '';
if (!$uuid) {
wp_send_json_error('UUID не указан');
}
$query = new WP_Query([
'post_type' => 'post',
'meta_query' => [[
'key' => '_wpcode_unique_id',
'value' => $uuid,
'compare' => '='
]],
'posts_per_page' => 1
]);
if ($query->have_posts()) {
$query->the_post();
wp_send_json_success(['title' => get_the_title()]);
} else {
wp_send_json_error('Пост не найден');
}
}
add_action('wp_ajax_wpcode_get_post_by_uuid', 'wpcode_ajax_get_post_by_uuid');
add_action('wp_ajax_nopriv_wpcode_get_post_by_uuid', 'wpcode_ajax_get_post_by_uuid');На фронтенде можно отправлять AJAX запрос с nonce и uuid и получать данные поста по уникальному ID.
Плагины для работы с уникальными идентификаторами в WordPress
Если не хотите писать код вручную, можно использовать готовые плагины, которые помогают генерировать и управлять уникальными ID:
- Clearfy Pro — содержит инструменты оптимизации и расширения функционала, в том числе для метаданных и пользовательских полей.
- WPRemark — подходит для создания расширенных заметок и метаданных, можно использовать для уникальных идентификаторов.
Но зачастую проще и эффективнее реализовать уникальные ID самостоятельно, как показано в примерах выше.
Советы по безопасности и производительности
При работе с уникальными ID важно помнить следующие моменты:
- Никогда не используйте пользовательские уникальные ID как единственный метод авторизации или проверки прав доступа — всегда проверяйте права пользователя и безопасность запросов.
- При использовании UUID храните их в метаполях с правильным префиксом, чтобы избежать конфликтов.
- Используйте индексы для мета-полей, если планируете масштабный поиск по уникальным ID, чтобы избежать замедления запросов.
- Для AJAX и REST API запросов обязательно используйте nonce и права доступа.
Заключение
Добавление уникального идентификатора к постам WordPress расширяет возможности сайта, позволяет гибко интегрироваться с внешними системами и улучшает фильтрацию данных. Мы рассмотрели, как создать UUID при сохранении записи, вывести его в шаблоне, а также использовать для поиска и AJAX-запросов. Такой подход легко адаптируется под любые задачи и гарантирует уникальность ключей без изменения ядра WordPress.