Пользовательское поле не сохранено
Я пытаюсь добавить пользователю настраиваемое поле с помощью WPGraphQL. Поэтому я попытался воссоздать пример из официальной документации WPGraphQL https://docs.wpgraphql.com/extending/fields/:
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": []
}
}
}
}
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']);
}
}