Challenge: Create Custom Post Pages out of JSON. Update the data and delete pages in case they’re not in the JSON any more.
Solution:
- Create a Custom Post Type with slug “cptevent_2022” (e. g. with a Plugin like CPT UI).
Add Custom Post Fields “id” and “name” (e. g. with a Plugin like Advanced Custom Fields) - Create a new JCI-Template:
URL: https://api.json-content-importer.com/extra/json/crest.json
Name: crescat
twig-template:
{% set slugCPT = "cptevent_2022" %}
{# CPF: id and name #}
{% set idArr = [] %}
{% for item in _parent %}
{% if item.id %}
{% set id= item.id %}
{% set idArr = idArr | merge([id]) %}
{% set name = item.name %}
{% set listofcpp = wp_get_cp_by_cpf_keyvalue(slugCPT, "id", id) %}
{% if (listofcpp | length)==0 %}
{# create new page #}
{% set slug = name %}
{% set content = (item | json_encode) %}
{% set newpageid = wp_new_custom_post(slugCPT, name, slug, content) %}
{% set newcpf = wp_insert_custom_field_keyvalue(newpageid, "id", id) %}
newpageid: {{newpageid}} (id: {{id}}, name: {{name}})<br>
{% else %}
{# modify existing page #}
{% for k,v in listofcpp %}
modify pageid {{v}} (id: {{id}}, name: {{name}})<br>
{% set outdate = (currenttimestamp|date("U")) %}
{% set modf = wp_insert_custom_field_keyvalue(v, "name", outdate) %}
{% endfor %}
{% endif %}
{% endif %}
{% endfor %}
{# delete pages not in the current JSON #}
{% set listofcpp = wp_get_cp_by_cpf_keyvalue(slugCPT) %}
{% for k,v in listofcpp %}
{% set cpfvalArr = wp_get_custom_field_value(v, "id") %}
{% set isInJSON = FALSE %}
{% for cpfval in cpfvalArr %}
{% if cpfval in idArr %}
{# there is JSON-data for that page #}
{% set isInJSON = TRUE %}
{% endif %}
{% endfor %}
{% if not isInJSON %}
delete pageid: {{v}}<br>
{% set delcpt = wp_delete_custom_post(v, TRUE) %}
{% endif %}
{% endfor %}
This twig-code loops through the JSON and creates (if needed) a new Custom Post Page (CPP). Or – if CPP is already there – updates the CPP.
Also it loops through the existing CPP: If there is a CPP which is not in the JSON when updating, this CPP is deleted.
Shortcode:
[[jsoncontentimporterpro nameoftemplate="crescat"]]