Настраиваемое поле не сохранено

Я пытаюсь добавить пользователю настраиваемое поле с помощью WPGraphQL. Поэтому я попытался воссоздать пример из официальной документации WPGraphQL https://docs.wpgraphql.com/exnding/fields/#register-fields-to-the-schema:

add_action('graphql_init', function () {
  $hobbies = [
    'type'        => ['list_of' => 'String'],
    'description' => __('Custom field for user mutations', 'your-textdomain'),
    'resolve'     => function ($user) {
      $hobbies = get_user_meta($user->userId, 'hobbies', true);
      return !empty($hobbies) ? $hobbies : [];
    },
  ];

  register_graphql_field('User', 'hobbies', $hobbies);
  register_graphql_field('CreateUserInput', 'hobbies', $hobbies);
  register_graphql_field('UpdateUserInput', 'hobbies', $hobbies);
});

Я уже поменял тип с \WPGraphQL\Types::list_of( \WPGraphQL\Types::string() ) на ['list_of' => 'String'].

Если я сейчас выполню мутацию updateUser, мои хобби не обновятся. Что я неправильно делаю?

Мутация:

mutation MyMutation {
  __typename
  updateUser(input: {clientMutationId: "tempId", id: "dXNlcjox", hobbies: ["football", "gaming"]}) {
    clientMutationId
    user {
      hobbies
    }
  }
}

Вывод:

{
  "data": {
    "__typename": "RootMutation",
    "updateUser": {
      "clientMutationId": "tempId",
      "user": {
        "hobbies": []
      }
    }
  }
}

person Jakob Meusburger    schedule 25.08.2020    source источник
comment
определения полей недостаточно ... прочтите документацию о мутациях ... graphql_register_edit_mutation ... _2 _...   -  person xadm    schedule 25.08.2020
comment
О, спасибо, думаю, как это написано в документации меня немного смутило :)   -  person Jakob Meusburger    schedule 25.08.2020


Ответы (1)


Благодаря xadm единственное, что я забыл, - это действительно изменить поле. Немного смутила документация, моя вина. (Я действительно новичок в WPGraphQL, кстати)

Вот что нужно добавить:

add_action('graphql_user_object_mutation_update_additional_data', 'graphql_register_user_mutation', 10, 5);

function graphql_register_user_mutation($user_id, $input, $mutation_name, $context, $info)
{
  if (isset($input['hobbies'])) {
    // Consider other sanitization if necessary and validation such as which
    // user role/capability should be able to insert this value, etc.
    update_user_meta($user_id, 'hobbies', $input['hobbies']);
  }
}
person Jakob Meusburger    schedule 25.08.2020