Intereting Posts
Woocommerce Добавить вариант продукта в корзину по специальной ссылке jQuery Image Annotation Список категорий с настраиваемым кодом Что может привести к тому, что действие «wp» будет срабатывать дважды на странице (но только один раз за сообщение) только в Firefox? Неполная страница вложения Janrain / Simple Modal в перенаправленном домене Программно добавить пользовательскую страницу / путь / URL / маршрут в WordPress Обновления плагинов не отображаются Показывать только, когда у таксономии есть сообщения? Изменение порядка сообщений после выполнения запроса Индивидуальная таксономия отзывов не отображается (белый экран) В массиве preprocess_comment отсутствует comment_ID Случайные сообщения в WP_Query при поиске по тегу Изменение структуры постоянных ссылок для определенной категории Показывать виджеты редактора только на страницах, которые используют конкретный шаблон?

Пользовательское поле WordPress должно быть уникальным. Является ли это возможным?

У меня есть настраиваемое поле под названием «website_url». Он должен быть уникальным.

Пример: если автор установил « https://wordpress.stackexchange.com/questions/ask » в качестве значения настраиваемого поля в качестве сообщения, « https://wordpress.stackexchange.com/questions/ask » не может использоваться любой другой должности.

Как это сделать?

Solutions Collecting From Web of "Пользовательское поле WordPress должно быть уникальным. Является ли это возможным?"

Вы можете использовать 'add_post_metadata' и 'update_post_meta' , если функция, подключенная туда, возвращает ничего, кроме NULL процесс добавления / обновления метаданных прекращается.

Два крючка проходят почти одинаковые аргументы:

  1. НОЛЬ
  2. сообщение id
  3. мета-ключ
  4. добавление / обновление метаданных

Только последний аргумент отличается, в случае, если обновление является предыдущим значением, в случае добавления это $unique значение, переданное add_post_meta .

Идея такова:

  1. запустить обратный вызов фильтра для обоих крючков
  2. используйте специальный SQL-запрос, чтобы убедиться, что значение уникально
  3. id значение уже используется, а затем возвращает ничего, кроме NULL

Пример:

 add_filter( 'add_post_metadata', 'my_unique_url_meta', 10, 4 ); add_filter( 'update_post_metadata', 'my_unique_url_meta', 10, 4 ); function my_unique_url_meta( $null, $pid, $key, $value ) { // here I assume the meta key to force unique is "url", change this to fit your needs if ( $key !== 'url' ) return $null; global $wpdb; $exists = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->postmeta} WHERE meta_key = %s AND meta_value = %s", $key, $value ) ); // return anything but NULL stop the process, however returning FALSE is the only way // to obtain a "pretty" error message by WordPress in post admin screen if ( ! empty( $exists ) ) return FALSE; } 

Используя предыдущий код, когда мета-поле для мета-ключа уже завершено, вы получаете сообщение об ошибке, например «Укажите произвольное значение поля». так же, как вы не указали какое-либо настраиваемое значение поля, и я боюсь, что это сообщение не может быть изменено. Кроме того, если после добавления уже используемого мета-значения для настраиваемого поля вы просто сохраняете / обновляете сообщение (прежде чем нажимать кнопку «Добавить пользовательское поле» внутри метабокса), вы не увидите сообщения об ошибке, но когда страница перезагружается, пользовательское поле просто не существует.

Предупреждение Previuos применяется только к метаконтакту ядра «Custom Fields», но вы можете использовать специальный метабокс для своего уникального метаки и использовать ajax для отображения правильного сообщения об ошибке, однако мой код гарантирует, что никто не может добавить не уникальное мета значение, даже используя код (а не пользовательский интерфейс).