Intereting Posts
Отключить перенаправление канонических Термины таксономии не могут найти сообщения из archive.php или taxonomy.php Удаление пользовательских функций фона и заголовка в дочерней теме Тег «больше» не появляется, когда категория просмотра достигает или выполняет поиск назначение именования admin Обновление WordPress полностью сломало установку. На главной странице теперь отображается пустая rss-лента Показать все подкатегории из определенной категории? Только категории списков, содержащие записи определенного пользовательского типа сообщений Сделайте больше действий после успешного входа в систему Пользовательский запрос в пользовательской таблице не работает Переключатель языка WordPress WordPress на Mac не загружает страницу администратора Использование переменных shortcode с помощью wp_localize_script Потерянная версия последней страницы WP_query category__in не работает, только тянет из первой категории

Преобразование первичных ключей из целых чисел автоинкремента в UUID

Цель

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

Рассуждение

Мне нужен ключ, который будет универсально уникальным, по крайней мере, в рамках нескольких веб-сайтов WordPress. Идея состоит в том, чтобы синхронизировать сообщения и другие данные между сайтами таким образом, чтобы почта, созданная на любом сайте, была доступна для всех других сайтов. Различные веб-сайты будут размещаться на разных серверах в разных местах.

Проблема

Функциональность автоинкремента, на которую опирается WP, явно приведет к тому, что один и тот же ключ будет использоваться в соответствующей таблице каждого сайта WP для разных должностей, то есть первое сообщение на каждом веб-сайте будет 1 , в то время как мне нужно, чтобы он был уникальным для всех установок, поэтому что я могу объединить данные с каждого из них на каждый другой веб-сайт.

Когда WP извлекает первичный ключ, он передает эти значения целым. Когда PHP получает BIGINT из MySQL, он обычно управляет им как float, потому что он больше, чем внутренний предел PHP, но приведение его как int в PHP приводит к усечению его в моем случае.

Что я сделал до сих пор

В настоящее время я использую uniquid() PHP для генерации ключа, который создает 13-символьную строку, которая затем преобразуется в десятичную строку в области 1388661576514060 (сегодня), которая меньше, чем BIGINT в MySQL (до 18446744073709551615 ), поэтому это круто, и переопределение, которое я применил к wpdb успешно записывает его в базу данных, но целочисленный предел PHP намного меньше, до 2147483647 .

Это довольно просто сделать, переопределив вспомогательную функцию insert_replace и функцию запроса в wpdb с функциями в новом классе, которые устанавливают и запоминают уникальное значение, которое будет использоваться в качестве первичного ключа.

В настоящее время я пытаюсь попытаться удалить (int) кастинг и посмотреть, решит ли это мою проблему, хотя я бы предпочел не вносить изменения в ядро ​​WP, похоже, это мой единственный вариант.


мысли

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

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

Я бы предпочел не взламывать ядро ​​вообще по всем очевидным причинам, мог ли кто-нибудь предложить и мысли или идеи о том, как обходить эту проблему или, наоборот, другой подход к ней?

Изменение и повторное назначение основных полей в базе данных должностей нецелесообразно. Основное поведение может легко измениться и сломать его.

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