はじめに

WordPressのusersテーブルは、ユーザーに関する基本的な情報のみを含むように設計されています。

WP 4.7以降、このテーブルには:IDuser_loginuser_passuser_nicenameuser_emailuser_urluser_registereduser_activation_keyuser_statusdisplay_nameが含まれています。

このため、追加のデータを保存するために、usermetaテーブルが導入され、ユーザーに関する任意の量のデータを保存できます。

両方のテーブルは、usersテーブルのIDに基づく1対多の関係で結びついています。

ユーザーメタデータの操作

ユーザーメタデータを操作する主な方法は2つあります。

  • 1. ユーザーのプロフィール画面のフォームフィールド。
  • 2. プログラム的に、関数呼び出しを介して。

フォームフィールドを介して

フォームフィールドオプションは、ユーザーがWordPress管理エリアにアクセスできる場合に適しています。このエリアでは、プロフィールを表示および編集できます。

例に入る前に、プロセスに関与するフックとその理由を理解することが重要です。

show_user_profileフック

このアクションフックは、ユーザーが自分のユーザープロフィールを編集するたびに発火します。

覚えておいてください、 自分のプロフィールを編集する権限がないユーザーは、このフックを発火させません。

edit_user_profileフック

このアクションフックは、ユーザーが他の誰かのユーザープロフィールを編集するたびに発火します。

覚えておいてください、 第三者のプロフィールを編集する権限がないユーザーは、このフックを発火させません。

例のフォームフィールド

以下の例では、すべてのプロフィール画面に誕生日フィールドを追加します。プロフィールの更新時にデータベースに保存します。

  1. /**
  2. * The field on the editing screens.
  3. *
  4. * @param $user WP_User user object
  5. */
  6. function wporg_usermeta_form_field_birthday( $user ) {
  7. ?>
  8. <h3>It's Your Birthday</h3>
  9. <table class="form-table">
  10. <tr>
  11. <th>
  12. <label for="birthday">Birthday</label>
  13. </th>
  14. <td>
  15. <input type="date"
  16. class="regular-text ltr"
  17. id="birthday"
  18. name="birthday"
  19. value="<?= esc_attr( get_user_meta( $user->ID, 'birthday', true ) ) ?>"
  20. title="Please use YYYY-MM-DD as the date format."
  21. pattern="(19[0-9][0-9]|20[0-9][0-9])-(1[0-2]|0[1-9])-(3[01]|[21][0-9]|0[1-9])"
  22. required>
  23. <p class="description">
  24. Please enter your birthday date.
  25. </p>
  26. </td>
  27. </tr>
  28. </table>
  29. <?php
  30. }
  31. /**
  32. * The save action.
  33. *
  34. * @param $user_id int the ID of the current user.
  35. *
  36. * @return bool Meta ID if the key didn't exist, true on successful update, false on failure.
  37. */
  38. function wporg_usermeta_form_field_birthday_update( $user_id ) {
  39. // check that the current user have the capability to edit the $user_id
  40. if ( ! current_user_can( 'edit_user', $user_id ) ) {
  41. return false;
  42. }
  43. // create/update user meta for the $user_id
  44. return update_user_meta(
  45. $user_id,
  46. 'birthday',
  47. $_POST['birthday']
  48. );
  49. }
  50. // Add the field to user's own profile editing screen.
  51. add_action(
  52. 'show_user_profile',
  53. 'wporg_usermeta_form_field_birthday'
  54. );
  55. // Add the field to user profile editing screen.
  56. add_action(
  57. 'edit_user_profile',
  58. 'wporg_usermeta_form_field_birthday'
  59. );
  60. // Add the save action to user's own profile editing screen update.
  61. add_action(
  62. 'personal_options_update',
  63. 'wporg_usermeta_form_field_birthday_update'
  64. );
  65. // Add the save action to user profile editing screen update.
  66. add_action(
  67. 'edit_user_profile_update',
  68. 'wporg_usermeta_form_field_birthday_update'
  69. );

プログラム的に

このオプションは、カスタムユーザーエリアを構築している場合や、WordPress管理エリアへのアクセスを無効にする予定がある場合に適しています。

ユーザーメタデータを操作するために利用可能な関数は:add_user_meta()update_user_meta()delete_user_meta()get_user_meta()です。

追加

  1. add_user_meta(
  2. int $user_id,
  3. string $meta_key,
  4. mixed $meta_value,
  5. bool $unique = false
  6. );

使用されるパラメータの完全な説明については、add_user_meta()に関する関数リファレンスを参照してください。

更新

  1. update_user_meta(
  2. int $user_id,
  3. string $meta_key,
  4. mixed $meta_value,
  5. mixed $prev_value = ''
  6. );

使用されるパラメータの完全な説明については、update_user_meta()に関する関数リファレンスを参照してください。

削除

  1. delete_user_meta(
  2. int $user_id,
  3. string $meta_key,
  4. mixed $meta_value = ''
  5. );

使用されるパラメータの完全な説明については、delete_user_meta()に関する関数リファレンスを参照してください。

取得

  1. get_user_meta(
  2. int $user_id,
  3. string $key = '',
  4. bool $single = false
  5. );

使用されるパラメータの完全な説明については、get_user_meta()に関する関数リファレンスを参照してください。

注意してください、$user_idのみを渡すと、関数はすべてのメタデータを連想配列として取得します。

プラグインやテーマのどこでもユーザーメタデータをレンダリングできます。