Pustaka queriesImpor posts dari CSV
Impor posts dari CSV
Query ini mengimpor posts dari sebuah CSV.
Query ini membuat post baru dengan judul, kutipan, konten, dan penulis (diberikan melalui username) dari setiap post.
Nama-nama kolom dengan field tersebut diberikan melalui variabel:
$titleColumn$excerptColumn$contentColumn$authorUsernameColumn
...dengan nilai default "Title", "Excerpt", "Content", dan "Author" masing-masing.
URL sumber CSV harus diberikan melalui variabel $url.
########################################################################
#
# Variables:
# - url: URL of the CSV
# - titleColumn: Column name (on the CSV header) for the post's title. Default: "Title"
# - excerptColumn: Column name (on the CSV header) for the post's excerpt. Default: "Excerpt"
# - contentColumn: Column name (on the CSV header) for the post's content. Default: "Content"
# - authorUsernameColumn: Column name (on the CSV header) for the post author's username. Default: "Author"
#
# *********************************************************************
#
# === Description ===
#
# This Persisted GraphQL query imports posts from a CSV.
#
# It creates a new post with the title, excerpt, content and author
# (provided via username) of each post.
#
# The names of the columns with those fields are provided via vars,
# with default values "Title", "Excerpt", "Content" and "Author"
# respectively.
#
########################################################################
#
# === CSV Examples ===
#
# The following CSV will import 3 posts:
#
# Title,Excerpt,Content,Author
# Multi-channelled optimal interface,Inventore iste velit et expedita ipsa dolor,<p>Inventore iste velit et expedita ipsa dolor. Optio suscipit qui id harum corporis dignissimos.</p>,admin
# Ergonomic motivating parallelism,Consequuntur velit quasi assumenda,<p>Consequuntur velit quasi assumenda. Eum non saepe est. Ut dolorem harum eveniet eaque nemo impedit. Voluptatem commodi modi sed sed animi voluptatem.</p>,admin
# Down-sized solution-oriented securedline,Ipsam minima qui asperiores dolorum unde voluptas quia voluptate,<p>Ipsam minima qui asperiores dolorum unde voluptas quia voluptate. Incidunt omnis cumque beatae quo deleniti ex. Praesentium nihil et consectetur neque commodi tempora ipsa adipisci. Praesentium perferendis sint est.</p>,admin
#
# The content can contain newlines (then it must be surrounded with `"`),
# and block markup (to insert posts for the WordPress editor):
#
# Title,Excerpt,Content,Author
# Multi-channelled optimal interface,Inventore iste velit et expedita ipsa dolor,"<p>Inventore iste velit et expedita ipsa dolor. Optio suscipit qui id harum corporis dignissimos.</p>
# <p>Iste provident aut incidunt dolorum esse nobis. Porro est deserunt quos quia cupiditate earum magnam. Distinctio qui et aut iste et.</p>
# <p>Aut earum quos accusamus voluptas sit tempore est. Dolore tempora doloremque magni excepturi. Ullam illum et ullam cum sed.</p>",admin
# Ergonomic motivating parallelism,Consequuntur velit quasi assumenda,"<p>Consequuntur velit quasi assumenda. Eum non saepe est. Ut dolorem harum eveniet eaque nemo impedit. Voluptatem commodi modi sed sed animi voluptatem.</p>
# <figure class=""wp-block-image size-large""><img src=""https://mysite.com/wp-content/uploads/wordpress0.jpg"" class=""wp-image-5""/></figure>
# <p>Velit quo iste omnis sint quis. Voluptatibus dolorem sequi ipsum corrupti officia. Ut rem quasi ipsa ut. Ut ad dolor ullam error excepturi.</p>",admin
# Down-sized solution-oriented securedline,Ipsam minima qui asperiores dolorum unde voluptas quia voluptate,"<p>Ipsam minima qui asperiores dolorum unde voluptas quia voluptate. Incidunt omnis cumque beatae quo deleniti ex. Praesentium nihil et consectetur neque commodi tempora ipsa adipisci. Praesentium perferendis sint est.</p>
# <p>Et aut fuga aliquam consequuntur dolore sunt ut ut. Quibusdam in voluptas vitae quia eaque. Eligendi dolorum dolorem vitae et vitae et ut.</p>",admin
#
# The content can also contain block markup, to insert posts for the
# WordPress editor:
#
# Title,Excerpt,Content,Author
# Ergonomic motivating parallelism,Consequuntur velit quasi assumenda,"<!-- wp:paragraph -->
# <p>Consequuntur velit quasi assumenda. Eum non saepe est. Ut dolorem harum eveniet eaque nemo impedit. Voluptatem commodi modi sed sed animi voluptatem.</p>
# <!-- /wp:paragraph -->
# <!-- wp:image {""id"":5,""sizeSlug"":""large""} -->
# <figure class=""wp-block-image size-large""><img src=""https://mysite.com/wp-content/uploads/wordpress0.jpg"" alt=""wordpress logo"" class=""wp-image-5""/></figure>
# <!-- /wp:image -->",admin
#
########################################################################
query InitializeDynamicVariables
@configureWarningsOnExportingDuplicateVariable(enabled: false)
{
postInputs: _echo(value: [])
@export(as: "postInputs")
@remove
}
query GetPostsFromCSVAndExportData(
$url: URL!
$titleColumn: String! = "Title"
$excerptColumn: String! = "Excerpt"
$contentColumn: String! = "Content"
$authorUsernameColumn: String! = "Author"
)
@depends(on: "InitializeDynamicVariables")
{
_sendHTTPRequest(input: {
url: $url,
method: GET
}) {
body
csv: _strParseCSV(
string: $__body
)
postInputs: _echo(value: $__csv)
@underEachArrayItem(
passValueOnwardsAs: "csvPostEntry"
affectDirectivesUnderPos: [1, 2, 3, 4, 5]
)
@applyField(
name: "_objectProperty",
arguments: {
object: $csvPostEntry,
by: {
key: $titleColumn,
}
},
passOnwardsAs: "postTitle"
)
@applyField(
name: "_objectProperty",
arguments: {
object: $csvPostEntry,
by: {
key: $excerptColumn,
}
},
passOnwardsAs: "postExcerpt"
)
@applyField(
name: "_objectProperty",
arguments: {
object: $csvPostEntry,
by: {
key: $contentColumn,
}
},
passOnwardsAs: "postContent"
)
@applyField(
name: "_objectProperty",
arguments: {
object: $csvPostEntry,
by: {
key: $authorUsernameColumn,
}
},
passOnwardsAs: "postAuthorUsername"
)
# Already create (and export) the inputs for the mutation
@applyField(
name: "_echo",
arguments: {
value: {
status: draft,
title: $postTitle,
excerpt: $postExcerpt,
contentAs: {
html: $postContent
},
authorBy: {
username: $postAuthorUsername
}
}
},
setResultInResponse: true
)
@export(as: "postInputs")
}
}
mutation CreatePostsFromCSVEntries
@depends(on: "GetPostsFromCSVAndExportData")
{
createPosts(inputs: $postInputs) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
slug
date
status
title
excerpt
content
author {
id
username
}
}
}
}