Разница между update_user_meta и update_user_option

11

Может кто - нибудь объяснить , в чем разница между update_user_metaи update_user_optionи в каких сценариях оба могут быть использованы?

mpsbhat
источник

Ответы:

8

С точки зрения непрофессионала нет большой разницы! update_user_option()использованияupdate_user_meta() внутренне. Единственная разница заключается в том, что update_user_option()префикс имени опции указывается с префиксом таблицы базы данных + идентификатором блога, если вы используете мультисайт, и просто префиксом таблицы, если вы используете установку на одном сайте.

Посмотрите на код update_user_option()

/**
 * Update user option with global blog capability.
 *
 * User options are just like user metadata except that they have support for
 * global blog options. If the 'global' parameter is false, which it is by default
 * it will prepend the WordPress table prefix to the option name.
 *
 * Deletes the user option if $newvalue is empty.
 *
 * @since 2.0.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $user_id     User ID.
 * @param string $option_name User option name.
 * @param mixed  $newvalue    User option value.
 * @param bool   $global      Optional. Whether option name is global or blog specific.
 *                            Default false (blog specific).
 * @return int|bool User meta ID if the option didn't exist, true on successful update,
 *                  false on failure.
 */
function update_user_option( $user_id, $option_name, $newvalue, $global = false ) {
    global $wpdb;

    if ( !$global )
        $option_name = $wpdb->get_blog_prefix() . $option_name;

    return update_user_meta( $user_id, $option_name, $newvalue );
}

К вашему имени опции добавляется префикс таблицы + идентификатор блога (только если идентификатор отличается от 1 и 0).

Если вы установите последний параметр $globalдля trueнего не имеет никакого значения сupdate_user_meta() .

Цель update_user_option() функции

В отличие от других таблиц, WordPress не создает отдельную таблицу для usermeta для каждого сайта. Он сохраняет информацию о пользователях в одной таблице пользовательских меток для всех блогов (в мультисайтах). Это просто префикс имени ключа для каждого сайта, blog prefixнапример, для блога с идентификатором 4 wp_capabilitiesхранится какwp_4_capabilities .

Так что любая информация, которую вы будете сохранять update_user_option(), например key_name_abc, станетwp_key_name_abc для основного сайта в многосайтовой или в одиночной установке. В будущем, если вы преобразуете свой сайт в мультисайт, информация будет доступна только на основном сайте.

Используйте эту функцию, если считаете, что некоторая информация зависит от сайта + пользователя. Не так, как имя, адрес электронной почты и т. Д., Потому что эта информация принадлежит пользователю и сайту независимо

Sumit
источник
7

Оба записывают свои данные в таблицу «usermeta». Пользовательские параметры, хранящиеся в таблице usermeta, сохраняют префикс таблицы wordpress, например, wp_, тогда как пользовательская мета, также сохраненная в таблице usermeta, - нет.

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

Параметры на самом деле совсем другие. Пользовательская опция имеет $ user_id, $ option_name, $ newvalue, $ global, а пользовательская мета имеет $ user_id, $ meta_key, $ meta_value, $ prev_value.

Вот некоторые значения для параметров и пользовательских usermeta.

Опции

  • wp_user_level
  • wp_user-настройка
  • wp_capabilities
  • wp_user-настройка время

пользователь

  • имя
  • фамилия
  • прозвище
  • rich_editing
  • show_admin_bar_front
  • admin_color

https://codex.wordpress.org/Function_Reference/update_user_option#Parameters

https://codex.wordpress.org/Function_Reference/update_user_meta#Parameters

Примеры страниц кодекса обеспечивают реальное использование.

Jarmerson
источник
1
Можете ли вы прояснить, где они хранятся? Ваше первое предложение предполагает, что они хранятся в одном и том же месте, но ваше второе подразумевает, что это не так, возможно, явный пример был бы лучше? Имейте в виду, что ответы должны быть самодостаточными, поэтому они все еще имеют смысл после установки linkrot. Кодекс также плохо поддерживается и заменяется на devhub
Том Дж. Новелл
@TomJNowell их можно найти в wp-includes / user.php - вы найдете значения как мета, так и опций в таблице usermeta. Я отредактирую свой ответ LOL
Jarmerson