Crea articoli Bricks in blocco da un CSV
Questa query crea più articoli Bricks in blocco importando dati da un file CSV.
Questa query richiede che l'estensione Bricks sia abilitata.
Per creare gli articoli, è necessario fornire:
- Un modello Bricks da replicare, contenente variabili nel suo contenuto e nei dati Bricks
- Un custom post type con Bricks abilitato per creare i nuovi articoli
- L'URL di un file CSV con il contenuto dinamico
Il file CSV avrà i nomi delle variabili come nomi di colonna, e i valori saranno i valori di ciascuna variabile. La query elaborerà ogni riga del file CSV per creare singoli articoli Bricks.
Ad esempio, questo file CSV creerà 3 articoli:
pageTitle,heroTitle,heroDesc,heroButtonText1,heroButtonLink1,heroButtonText2,heroButtonLink2
"Welcome to Our Site","<h2>Welcome</h2>","<p>This is the main content.</p>","A brief description","https://mysite.com/pricing","Another description","https://mysite.com/more"
"About Us","<h2>About</h2>","<p>Learn more about our company.</p>","Company information","https://mysite.com/about","We are humans","https://mysite.com/humans"
"Contact","<h2>Contact</h2>","<p>Get in touch with us.</p>","Contact details","https://mysite.com/contact","Subscribe to our newsletter","https://mysite.com/newsletter"Il contenuto della pagina e i dati Bricks conterranno quelle variabili, racchiuse tra {...}.
In corrispondenza del CSV precedente, il nostro articolo Bricks di origine può utilizzare le seguenti variabili:
{pageTitle}{heroTitle}{heroDesc}{heroButtonText1}{heroButtonLink1}{heroButtonText2}{heroButtonLink2}
Ad esempio, il titolo della pagina potrebbe essere "{pageTitle}", oppure "Welcome to {pageTitle}", ecc.
Allo stesso modo, un elemento heading di Bricks può avere la sua proprietà text impostata su "{heroTitle}", oppure "Welcome to {heroTitle}", ecc.
E un elemento button avrà la sua proprietà Link => URL impostata su "{heroButtonLink1}", oppure "{heroButtonLink2}".
La query richiede le seguenti variabili:
$url: L'URL del file CSV (con intestazioni)$templateId: Il modello Bricks (di CPTbricks_template) da utilizzare per creare i nuovi articoli$customPostType: Il custom post type con Bricks abilitato per creare i nuovi articoli$status: Lo stato degli articoli creati (predefinito:"draft")
query InitializeDynamicVariables(
$customPostType: CustomPostEnumString!
)
@configureWarningsOnExportingDuplicateVariable(enabled: false)
{
emptyBool: _echo(value: false)
@export(as: "bricksIsEnabledForCustomPostType")
@export(as: "hasTemplate")
@remove
emptyList: _echo(value: [])
@export(as: "adaptedBricksDataTextElementTextsList")
@export(as: "adaptedBricksDataLinkElementLinksList")
@export(as: "newCustomPostIds")
@export(as: "customPostInputs")
@remove
useWhichPageBuilderWithCustomPostType(customPostType: $customPostType)
bricksIsEnabledForCustomPostType: _equals(
value1: $__useWhichPageBuilderWithCustomPostType
value2: "bricks"
)
@export(as: "bricksIsEnabledForCustomPostType")
}
query GetBricksCustomPostAndExportData($templateId: ID!)
@depends(on: "InitializeDynamicVariables")
@include(if: $bricksIsEnabledForCustomPostType)
{
bricksTemplate: customPost(by: { id: $templateId }, customPostTypes: "bricks_template", status: any) {
# Fields to be duplicated
author @export(as: "authorID") {
id
}
rawContent @export(as: "rawContent")
rawExcerpt @export(as: "excerpt")
featuredImage @export(as: "featuredImageID") {
id
}
rawTitle @export(as: "title")
metaKeys(filter: { exclude: [
"_thumbnail_id",
"_edit_last",
"_edit_lock",
"_pingme",
"_encloseme",
"_trackbackme",
"enclosure",
"_wp_trash_meta_status",
"_wp_trash_meta_time",
"_wp_desired_post_slug",
"_wp_old_slug",
"_wp_old_date",
] })
meta(keys: $__metaKeys)
@export(as: "meta")
bricksDataTextElements: bricksData(filterBy: {include: [
"heading",
"text",
"text-basic",
"button",
"dropdown",
]})
@underEachArrayItem(
affectDirectivesUnderPos: [1, 3]
)
@underJSONObjectProperty(by: { key: "id" })
@export(as: "bricksDataTextElementIDs")
@underJSONObjectProperty(
by: { path: "settings.text" }
failIfNonExistingKeyOrPath: false
)
@export(as: "bricksDataTextElementTexts")
bricksDataLinkElements: bricksData(filterBy: {include: [
"text-link",
"button",
]})
@underEachArrayItem(
affectDirectivesUnderPos: [1, 3]
)
@underJSONObjectProperty(by: { key: "id" })
@export(as: "bricksDataLinkElementIDs")
@underJSONObjectProperty(
by: { path: "settings.link.url" }
failIfNonExistingKeyOrPath: false
)
@export(as: "bricksDataLinkElementLinks")
}
hasTemplate: _notNull(value: $__bricksTemplate)
@export(as: "hasTemplate")
}
query GetAndFormatDataFromCSV(
$url: URL!
)
@depends(on: "GetBricksCustomPostAndExportData")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
_sendHTTPRequest(input: {
url: $url,
method: GET
}) {
body
csv: _strParseCSV(
string: $__body
)
@export(as: "csvPostEntries")
@underArrayItem(
index: 0
passOnwardsAs: "csvPostEntry"
affectDirectivesUnderPos: [1, 2]
)
@applyField(
name: "_objectProperties",
arguments: {
object: $csvPostEntry,
},
passOnwardsAs: "csvKeys"
)
@exportFrom(
scopedDynamicVariable: $csvKeys,
as: "csvKeys"
)
}
}
query GenerateVariablePlaceholderNames
@depends(on: "GetAndFormatDataFromCSV")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
csvKeyPlaceholderNames: _echo(value: $csvKeys)
@underEachArrayItem(passValueOnwardsAs: "entryKey")
@applyField(
name: "_sprintf",
arguments: {
string: "{%s}",
values: [$entryKey],
},
setResultInResponse: true
)
@export(as: "csvKeyPlaceholderNames")
}
query GenerateCustomPostInputs(
$customPostType: CustomPostEnumString!
$status: CustomPostStatusEnum! = draft
)
@depends(on: "GenerateVariablePlaceholderNames")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
customPostInputs: _echo(value: $csvPostEntries)
@underEachArrayItem(
passValueOnwardsAs: "csvPostEntry"
affectDirectivesUnderPos: [1, 2, 3, 4, 5, 6, 7, 8]
)
@applyField(
name: "_objectValues",
arguments: {
object: $csvPostEntry,
},
passOnwardsAs: "replaceTo"
)
@applyField(
name: "_strReplaceMultiple",
arguments: {
search: $csvKeyPlaceholderNames,
replaceWith: $replaceTo,
in: $title
},
passOnwardsAs: "adaptedTitle"
)
@applyField(
name: "_strReplaceMultiple",
arguments: {
search: $csvKeyPlaceholderNames,
replaceWith: $replaceTo,
in: $excerpt
},
passOnwardsAs: "adaptedExcerpt"
)
# Already create (and export) the inputs for the mutation
@applyField(
name: "_echo",
arguments: {
value: {
status: $status,
customPostType: $customPostType,
authorBy: {
id: $authorID
},
title: $adaptedTitle,
excerpt: $adaptedExcerpt
contentAs: {
html: $rawContent
},
featuredImageBy: {
id: $featuredImageID
},
meta: $meta
}
},
setResultInResponse: true
)
# Already export the inputs to update the Bricks data
@applyField(
name: "_strArrayReplaceMultiple",
arguments: {
search: $csvKeyPlaceholderNames,
replaceWith: $replaceTo,
in: $bricksDataTextElementTexts
},
passOnwardsAs: "adaptedBricksDataTextElementTextsList"
)
@exportFrom(
scopedDynamicVariable: $adaptedBricksDataTextElementTextsList,
as: "adaptedBricksDataTextElementTextsList"
)
@applyField(
name: "_strArrayReplaceMultiple",
arguments: {
search: $csvKeyPlaceholderNames,
replaceWith: $replaceTo,
in: $bricksDataLinkElementLinks
},
passOnwardsAs: "adaptedBricksDataLinkElementLinksList"
)
@exportFrom(
scopedDynamicVariable: $adaptedBricksDataLinkElementLinksList,
as: "adaptedBricksDataLinkElementLinksList"
)
@export(as: "customPostInputs")
}
query AdaptBricksDataElementsFormat
@depends(on: "GenerateCustomPostInputs")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
adaptedBricksDataTextElementsList: _echo(value: $adaptedBricksDataTextElementTextsList)
@underEachArrayItem
@underEachArrayItem(
passIndexOnwardsAs: "index"
passValueOnwardsAs: "bricksDataTextElementText"
affectDirectivesUnderPos: [1, 2]
)
@applyField(
name: "_arrayItem"
arguments: {
array: $bricksDataTextElementIDs,
position: $index
}
passOnwardsAs: "bricksElementID"
)
@applyField(
name: "_echo"
arguments: {
value: {
id: $bricksElementID,
settings: {
text: $bricksDataTextElementText
}
}
},
setResultInResponse: true
)
@export(as: "adaptedBricksDataTextElementsList")
adaptedBricksDataLinkElementsList: _echo(value: $adaptedBricksDataLinkElementLinksList)
@underEachArrayItem
@underEachArrayItem(
passIndexOnwardsAs: "index"
passValueOnwardsAs: "bricksDataLinkElementLink"
affectDirectivesUnderPos: [1, 2]
)
@applyField(
name: "_arrayItem"
arguments: {
array: $bricksDataLinkElementIDs,
position: $index
}
passOnwardsAs: "bricksElementID"
)
@applyField(
name: "_echo"
arguments: {
value: {
id: $bricksElementID,
settings: {
link: {
url: $bricksDataLinkElementLink
}
}
}
},
setResultInResponse: true
)
@export(as: "adaptedBricksDataLinkElementsList")
}
mutation CreatePostsFromCSVEntries
@depends(on: "AdaptBricksDataElementsFormat")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
createCustomPosts(inputs: $customPostInputs) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
# Fields not to be duplicated
id
@export(
as: "newCustomPostIds",
type: LIST,
)
slug
date
status
# Fields to be duplicated
customPostType
author {
id
}
rawContent
excerpt
featuredImage {
id
}
title
metaKeys
meta(keys: $__metaKeys)
bricksData
}
}
}
query CreateUpdateBricksDataInputs
@depends(on: "CreatePostsFromCSVEntries")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
bricksMergeCustomPostTextElementDataItemInputs: _echo(value: $newCustomPostIds)
@underEachArrayItem(
passIndexOnwardsAs: "index"
passValueOnwardsAs: "newCustomPostId"
affectDirectivesUnderPos: [1, 2]
)
@applyField(
name: "_arrayItem"
arguments: {
array: $adaptedBricksDataTextElementsList,
position: $index
}
passOnwardsAs: "adaptedBricksDataTextElements"
)
@applyField(
name: "_echo",
arguments: {
value: {
customPostID: $newCustomPostId
elements: $adaptedBricksDataTextElements
}
},
setResultInResponse: true
)
@export(as: "bricksMergeCustomPostTextElementDataItemInputs")
bricksMergeCustomPostLinkElementDataItemInputs: _echo(value: $newCustomPostIds)
@underEachArrayItem(
passIndexOnwardsAs: "index"
passValueOnwardsAs: "newCustomPostId"
affectDirectivesUnderPos: [1, 2]
)
@applyField(
name: "_arrayItem"
arguments: {
array: $adaptedBricksDataLinkElementsList,
position: $index
}
passOnwardsAs: "adaptedBricksDataLinkElements"
)
@applyField(
name: "_echo",
arguments: {
value: {
customPostID: $newCustomPostId
elements: $adaptedBricksDataLinkElements
}
},
setResultInResponse: true
)
@export(as: "bricksMergeCustomPostLinkElementDataItemInputs")
bricksRegenerateCustomPostElementIDSetInputs: _echo(value: $newCustomPostIds)
@underEachArrayItem(passValueOnwardsAs: "newCustomPostId")
@applyField(
name: "_echo",
arguments: {
value: {
customPostID: $newCustomPostId
}
},
setResultInResponse: true
)
@export(as: "bricksRegenerateCustomPostElementIDSetInputs")
}
query AdaptBricksDataInputs
@depends(on: "CreateUpdateBricksDataInputs")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
bricksMergeCustomPostElementDataItemInputs: _arrayMerge(arrays: [
$bricksMergeCustomPostTextElementDataItemInputs,
$bricksMergeCustomPostLinkElementDataItemInputs
])
@export(as: "bricksMergeCustomPostElementDataItemInputs")
}
mutation UpdateAndRegenerateBricksData
@depends(on: "AdaptBricksDataInputs")
@include(if: $bricksIsEnabledForCustomPostType)
@include(if: $hasTemplate)
{
bricksMergeCustomPostElementDataItems(inputs: $bricksMergeCustomPostElementDataItemInputs) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
__typename
...on CustomPost {
id
bricksData
}
}
}
bricksRegenerateCustomPostElementIDSets(inputs: $bricksRegenerateCustomPostElementIDSetInputs) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
customPost {
__typename
...on CustomPost {
id
bricksData
}
}
}
}