Schema Functions
PHP 프로그래밍 언어의 기능을 GraphQL 필드 및 디렉티브로 노출합니다.

Click to watch tutorial video - 07:54
GraphQL 스키마에는 PHP 프로그래밍 언어의 기능을 노출하는 필드와 디렉티브가 제공됩니다.
함수 필드
함수 필드는 전역 필드이므로, GraphQL 스키마의 모든 타입(QueryRoot뿐만 아니라 Post, User 등)에 추가됩니다.
함수 필드는 데이터를 가져온 후 조작하는 데 유용합니다. 필드 값을 필요한 방식으로 변환할 수 있으며, 강력한 데이터 가져오기/내보내기 기능을 제공합니다.
예를 들어, Post.hasComments 필드는 있지만 그 반대 값이 필요한 경우, 새로운 Post.notHasComments 필드를 만드는 대신(PHP 코드를 편집해야 하는 작업), Field to Input 기능을 사용하여 hasComments의 값을 not 필드에 입력하면 GraphQL 쿼리 내에서 항상 새로운 값을 계산할 수 있습니다.
query {
posts {
id
hasComments
notHasComments: _not(value: $__hasComments)
}
}함수 디렉티브
GraphQL 스키마에는 PHP와 같은 프로그래밍 언어에서 흔히 볼 수 있는 기능을 노출하는 디렉티브가 제공됩니다.
디렉티브 필드는 데이터를 가져온 후 조작하는 데 유용합니다. 필드 값을 필요한 방식으로 변환할 수 있으며, 강력한 데이터 가져오기/내보내기 기능을 제공합니다.
예를 들어, 다음 쿼리는:
query {
posts {
title @strUpperCase
}
}...다음과 같은 응답을 반환합니다:
{
"data": {
"posts": [
{
"title": "HELLO WORLD!"
},
{
"title": "LOVELY WEATHER"
}
]
}
}헬퍼 필드
GraphQL 스키마에는 자주 사용되는 헬퍼 기능을 제공하는 필드가 추가됩니다.
헬퍼 필드는 전역 필드이므로, GraphQL 스키마의 모든 타입(QueryRoot뿐만 아니라 Post, User 등)에 추가됩니다.
다음 쿼리에서는 웹사이트 사용자들의 ID를 가져와서 해당 ID를 파라미터로 전달하는 새로운 GraphQL 쿼리를 실행합니다:
query {
users {
userID: id
url: _urlAddParams(
url: "https://somewebsite/endpoint/user-data",
params: {
userID: $__userID
}
)
headers: _httpRequestHeaders
headerNameValueEntryList: _objectConvertToNameValueEntryList(
object: $__headers
)
_sendHTTPRequest(input: {
url: $__url
options: {
headers: $__headerNameValueEntryList
}
}) {
statusCode
contentType
body
}
}
}환경 필드
GraphQL 스키마에는 환경 변수 또는 PHP 상수(주로 wp-config.php에서 정의되지만 다른 곳에서 정의될 수도 있음)에서 값을 가져올 수 있는 전역 필드 _env가 제공됩니다.
다음 쿼리는 GitHub의 비공개 저장소에 접근하기 위해 설정하는 환경 상수 GITHUB_ACCESS_TOKEN을 가져옵니다:
query {
githubAccessToken: _env(name: "GITHUB_ACCESS_TOKEN")
}이메일 발송
GraphQL 스키마에는 전역 뮤테이션 _sendEmail이 제공됩니다.
뮤테이션 _sendEmail은 WordPress의 wp_mail 함수를 실행하여 이메일을 발송합니다. 따라서 WordPress에서 설정된 이메일 발송 구성(사용할 SMTP 공급자 등)이 적용됩니다.
이메일은 messageAs 입력 값에 따라 "text" 또는 "HTML" 콘텐츠 타입으로 발송할 수 있습니다(messageAs는 "oneof" InputObject이므로 속성 중 하나만 지정할 수 있습니다).
mutation {
_sendEmail(
input: {
to: "target@email.com"
subject: "Email with text content"
messageAs: {
text: "Hello world!"
}
}
) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
}
}