Practitioner-plugin (WordPress): verschil tussen versies
Regel 41: | Regel 41: | ||
|} | |} | ||
− | === Tabel wp_posts - | + | === Tabel wp_posts - Publish-record === |
De belangrijkste tabel is <code>wp_posts</code>. Hier worden per posting twee records aangemaakt. Het belangrijkste van de twee, is vermoedelijk het ''publish-record''. Een impressie: | De belangrijkste tabel is <code>wp_posts</code>. Hier worden per posting twee records aangemaakt. Het belangrijkste van de twee, is vermoedelijk het ''publish-record''. Een impressie: | ||
Regel 55: | Regel 55: | ||
* post_name: Gegenereerd door AFC. Wordt waarschijnlijk gebruikt voor de (interne?) URL | * post_name: Gegenereerd door AFC. Wordt waarschijnlijk gebruikt voor de (interne?) URL | ||
* post_parent: 0 | * post_parent: 0 | ||
− | * guid. Bv. <code>http://bsp.dvb/?post_type=practitioners&p=797</code>. De escape-string staat voor het '&'-symbool. Herschreven geeft dit <code>http://bsp.dvb/?post_type=practitioners&p=797</code> - Dus de practitioner met ID 797 (ofzo) | + | * guid. Bv. <code>http://bsp.dvb/?post_type=practitioners&p=797</code>. De escape-string staat voor het '&'-symbool. Herschreven geeft dit <code>http://bsp.dvb/?post_type=practitioners&p=797</code> - Dus de practitioner met ID 797 (ofzo). Dit is inderdaad de waarde van het ID-veld |
* post_type: <code>practitioners</code>. | * post_type: <code>practitioners</code>. | ||
+ | |||
+ | === Tabel wp_posts - Revision-record === | ||
+ | |||
+ | * post_status: <code>inherit</code> | ||
+ | * post_name: <code>797-revision-1</code> | ||
+ | * guid: <code>http://bsp.dvb/797-revision-v1/</code> | ||
+ | * post_type: <code>revision</code> | ||
== Export van data == | == Export van data == |
Versie van 15 okt 2018 15:24
De Practitioner-plugin is een maatwerk-plugin die eind 2017 is ontwikkeld voor een specifiek project. Het betreft een CPT - Custom Post Type. De achterliggende principes zijn echter vrij universeel, vandaar deze documentatie: Hoe maak je gebruik van CPT's?
Onderdelen
Er komt nogal wat bij kijken:
- Plugin zelf
- Child-theme van het gebruikte theme Hoshi
- Advanced Custom Fields PRO-plugin
- CPT-objectdefinitie (JSON- of PHP-bestand)
- Ingevoerde data.
Deployment
Voorbeeld: Hoe migreer je de plugin naar een nieuwe locatie?
Bronlocatie
Doellocatie
|
Database-model
Tabel wp_posts - Publish-record
De belangrijkste tabel is wp_posts
. Hier worden per posting twee records aangemaakt. Het belangrijkste van de twee, is vermoedelijk het publish-record. Een impressie:
- ID - Dit is de primaire sleutel (bigint). Ik geloof dat-ie niet automatisch telt
- Date- & timestamp
- post_content: Wordt niet gebruikt
- post_title: Titel van het practitioner-record
- post_status: Published
- comment_status: Closed - In dit geval
- ping_status: Closed - In dit geval
- post_password: Leeg
- post_name: Gegenereerd door AFC. Wordt waarschijnlijk gebruikt voor de (interne?) URL
- post_parent: 0
- guid. Bv.
http://bsp.dvb/?post_type=practitioners&p=797
. De escape-string staat voor het '&'-symbool. Herschreven geeft dithttp://bsp.dvb/?post_type=practitioners&p=797
- Dus de practitioner met ID 797 (ofzo). Dit is inderdaad de waarde van het ID-veld - post_type:
practitioners
.
Tabel wp_posts - Revision-record
- post_status:
inherit
- post_name:
797-revision-1
- guid:
http://bsp.dvb/797-revision-v1/
- post_type:
revision
Export van data
- Ik weet niet hoe je CPT-gegevens gemakkelijk kunt exporteren - Ik heb het nog niet nodig gehad
- Op database-niveau is dit in ieder geval flink wat werk, omdat de data verspreid staat over twee tabellen, in meerdere velden.
Casus: Import mbv. Ultimate CSV Importer (zomer 2018)
- Dit heeft gewerkt, al was er wel een bug: Als ik alle velden 'gewoon' invulde, kreeg ik een offset-foutmelding (zie verderop). Ik geloof dat als ik een bepaald veld leegliet, het wel goed ging
- In de herfst van 2018, kon ik dit helaas niet hercreëren: Nu werden alleen de eerste letters van velden geïmporteerd + vage foutmeldingen.
Deze aanpak heb ik in de herfst van 2018 opgegeven: Het werkte niet en is om te kunnen werken, afhankelijk van diverse externe factoren (ihb.: deze plugin icm. met die advanced-nog-wat-plugin) die nog geld kosten ook → Zelf op db-niveau doen.
Opmaak importbestand
Dit betreft export vanuit LibreOffice Calc. Ongetwijfeld zijn er meer geldige mogelijkheden, maar dit werkt in ieder geval:
- UTF-8
- Tab-gescheiden of komma-gescheiden
- Alle velden omsloten met dubbele aanhalingstekens, of juist niet
Twee voorbeelden:
"Title" "firstname" "lastname" "description_short" "description_long" "city" "province" "website" "photo" "Jan1 Jan1 Achternaam" "Jan1" "Jan1 Achternaam" "Jan1 korte omschrijving" "Jan1 lange omschrijving" "Jan1 – Plaats" "Jan1 – Provincie" "Jan1 – Site" "Jan2 Jan2 Achternaam" "Jan2" "Jan2 Achternaam" "Jan2 korte omschrijving" "Jan2 lange omschrijving" "Jan2 – Plaats" "Jan2 – Provincie" "Jan2 – Site" "Jan3 Jan3 Achternaam" "Jan3" "Jan3 Achternaam" "Jan3 korte omschrijving" "Jan3 lange omschrijving" "Jan3 – Plaats" "Jan3 – Provincie" "Jan3 – Site"
en
Title firstname lastname description_short description_long city province website photo Jan1 Jan1 Achternaam Jan1 Jan1 Achternaam Jan1 korte omschrijving Jan1 lange omschrijving Jan1 – Plaats Jan1 – Provincie Jan1 – Site Jan2 Jan2 Achternaam Jan2 Jan2 Achternaam Jan2 korte omschrijving Jan2 lange omschrijving Jan2 – Plaats Jan2 – Provincie Jan2 – Site Jan3 Jan3 Achternaam Jan3 Jan3 Achternaam Jan3 korte omschrijving Jan3 lange omschrijving Jan3 – Plaats Jan3 – Provincie Jan3 – Site
Mapping - WordPress-velden
Cruciaal dat de kolom Title van een waarde is voorzien. Overige velden kun je negeren. Icm. de voorbeeldbestanden hierboven:
WP CSV ----------------- ----------------- Title Title Content -- Short Description --
Mapping - WordPress-WordPress Custom Fields
Dit zijn de velden die daadwerkelijk gebruikt worden.
WP CSV ----------------- ----------------- practitioner Title practitioner_city city practitioner_description_long description_long practitioner_description_short description_short practitioner_firstname firstname practitioner_lastname lastname practitioner_province province practitioner_website website
Image?
Geen idee.
Casus: Import op db-niveau (herfst 2018)
Eigenlijk toch al m'n favoriete stuk gereedschap: Op database-niveau importeren. Nogal bruut, maar ach, waar gehakt wordt vallen spaanders. Zolang je maar weet waar je mee bezig bent.
Database-niveau
- Practitioners zijn gewoon posts. Je vindt ze dus terug in tabel
wp_posts
. KolomID
is de primaire sleutel, en dit veld telt zelf - Maatwerkvelden + bijbehorende inhoud, vind je terug in tabel
wp_postmeta
. Bij Drupal wordt per veld een aparte tabel gebruikt. Hier vind je alles in één tabel.
Bug: Illegal string offset-error (zomer 2018)
Na import krijg ik bij alle velden (behalve titel) een illegal string offset-foutmelding
Debuggen
- Alleen het naam-veld importeren (dus het enige verplichte niet-custom-veld): Gaat goed
- Naam-veld + customt naam-veld importeren: Foutmelding.
Zie ook
Appendix: CPT-objectdefinitie
Het betreffende field group-exportbestand vanuit de Advanced Custom Fields PRO-plugin:
[ { "key": "group_5a44d8e93187a", "title": "Practitioners", "fields": [ { "key": "field_5a44db1c303ab", "label": "Practitioner", "name": "practitioner", "type": "group", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "", "class": "", "id": "" }, "layout": "block", "sub_fields": [ { "key": "field_5a44d90110811", "label": "Firstname", "name": "firstname", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "50", "class": "", "id": "" }, "default_value": "", "placeholder": "", "prepend": "", "append": "", "maxlength": "" }, { "key": "field_5a44da3910812", "label": "Lastname", "name": "lastname", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "50", "class": "", "id": "" }, "default_value": "", "placeholder": "", "prepend": "", "append": "", "maxlength": "" }, { "key": "field_5a44da5110813", "label": "Description (short)", "name": "description_short", "type": "textarea", "instructions": "Displayed in the Overview\/table", "required": 0, "conditional_logic": 0, "wrapper": { "width": "", "class": "", "id": "" }, "default_value": "", "placeholder": "", "maxlength": "", "rows": "", "new_lines": "" }, { "key": "field_5a44da70303a6", "label": "Description (long)", "name": "description_long", "type": "wysiwyg", "instructions": "Displayed on the single page", "required": 0, "conditional_logic": 0, "wrapper": { "width": "", "class": "", "id": "" }, "default_value": "", "tabs": "all", "toolbar": "full", "media_upload": 1, "delay": 0 }, { "key": "field_5a44daaa303a7", "label": "City", "name": "city", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "50", "class": "", "id": "" }, "default_value": "", "placeholder": "", "prepend": "", "append": "", "maxlength": "" }, { "key": "field_5a44dab4303a8", "label": "Province", "name": "province", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "50", "class": "", "id": "" }, "default_value": "", "placeholder": "", "prepend": "", "append": "", "maxlength": "" }, { "key": "field_5a44dad6303a9", "label": "Website", "name": "website", "type": "text", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "50", "class": "", "id": "" }, "default_value": "", "placeholder": "", "prepend": "", "append": "", "maxlength": "" }, { "key": "field_5a44daf7303aa", "label": "Photo", "name": "photo", "type": "image", "instructions": "", "required": 0, "conditional_logic": 0, "wrapper": { "width": "50", "class": "", "id": "" }, "return_format": "array", "preview_size": "thumbnail", "library": "all", "min_width": "", "min_height": "", "min_size": "", "max_width": "", "max_height": "", "max_size": "", "mime_types": "" } ] } ], "location": [ [ { "param": "post_type", "operator": "==", "value": "practitioners" } ] ], "menu_order": 0, "position": "normal", "style": "default", "label_placement": "top", "instruction_placement": "label", "hide_on_screen": [ "the_content" ], "active": 1, "description": "" } ]