Practitioner-plugin (WordPress): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 41: Regel 41:
 
|}
 
|}
  
=== Tabel wp_posts - publish-record ===
+
=== 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&#038;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&#038;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

Exporteer de ACF (Advanced Custom Fields)-objectdefinitie

Doellocatie

Installeer de Advanced Custom Fields PRO-plugin
Plaats het child-theme
Importeer objectdefinitie
Voer een nieuwe Practitioner in
Alle Practitioner-objecten zijn beschikbaar op /practitioners. Hiervoor hoef je geen dummy-pagina-met-shortcode aan te maken
Losse objecten vind je op /practitioners/voornaam-tussenvoegsel-achternaam

Database-model

Practitioner-records worden in eerste instantie bijgehouden in de tabel wp_posts. Per practitioners worden er twee records aangemaakt
De waardes voor de custom-velden worden opgeslagen in tabel wp_meta Per veld (bv. Plaats van practitioner xyz) zijn er twee records

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 dit http://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

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. Kolom ID 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": ""
    }
]