Databasemodel (WordPress): verschil tussen versies
(65 tussenliggende versies door dezelfde gebruiker niet weergegeven) | |||
Regel 1: | Regel 1: | ||
− | + | Dit is het hoofdartikel rondom het databasemodel van WordPress. Dit it artikel is slechts een beginnetje. Zie sectie [[#Zie ook | Zie ook]] voor meer. | |
− | * [[ | + | == Hoe vind je iets terug in de database? == |
− | * [[ | + | |
− | + | Soms is het een uitermate lastig kunstje om te achterhalen waar iets in de database staat. In okt. 2020 had ik een casus die laat zien dat het niet altijd zo moeilijk hoeft te zijn. | |
− | + | ||
+ | === Het probleem === | ||
+ | |||
+ | * Waar staan menu-items in de database? | ||
+ | * Ik had ergens opgepikt dat dat via taxonomieën gaat, maar daar kan ik zo snel niets vinden. | ||
+ | |||
+ | === Aanpak === | ||
+ | |||
+ | * Verander een menu-items in iets unieks. Bv. "Merk" → "Merkzzz" | ||
+ | * Maak een db-dump | ||
+ | * Selecteer regels uit de db-dump met de string "Merkzzz": <code>less fr_fr_s1 | grep Merkzzz > merkzzz.txt</code> | ||
+ | * Open merkzzz.txt in een editor. Schakel wordwrap uit. Het was nog steeds onleesbaar, maar het was wel duidelijk dat het ging om de tabellen "wp_posts" en "wp_yoast_indexable", en dat was genoeg | ||
+ | * Open tabel "wp_posts" in MySQL WorkBench en filter de output op "Merkzzz" - Klaar! | ||
+ | |||
+ | == Velden == | ||
+ | |||
+ | Meestal - maar niet altijd - hebben velden een ''globale naam''. Maw., veld ''blablah'' in de ene tabel, is meestal hetzelfde veld ''blahblah'' in een andere tabel: | ||
+ | |||
+ | === GUID's === | ||
+ | |||
+ | WordPress maintains GUID-fields, like in wp_posts. These are exactly that: ''Global Unique IDentifiers''. They were invented for feed-readers to keep track of what has been processed and what not. That they look like URLs, is completely irrelevant. You can update them after a migration, if you want, but frankly: Just ignore them [https://deliciousbrains.com/wordpress-post-guids-sometimes-update], [https://pods.io/2013/07/17/dont-use-the-guid-field-ever-ever-ever] | ||
+ | |||
+ | === ID === | ||
+ | |||
+ | * De centrale entititeit in een WordPress-database, is een ''post'' (tabel <code>wp_posts</code>). Een post heeft een PK, genaamd <code>ID</code> | ||
+ | * Deze naam is helaas niet globaal: In tabel <code>wp_term_relationships</code> heet dit veld namelijk <code>object_id</code> - Ik kan het echter verkeerd hebben: Misschien wordt met ''object'' iets anders (algemeners?) bedoeld dan een post-id. | ||
+ | |||
+ | == Objecten == | ||
+ | |||
+ | Dit hoofdstuk benaderd het database vanuit ''objecten''. Bv.: Waar vind ik alle WooCommerce-producteninformatie? Hoe zit de Kenmerk-taxonomie in elkaar? | ||
+ | |||
+ | === ACF-velden (inclusief buttonbar) === | ||
+ | |||
+ | Zie [[ACF (Advanced Custom Fields, WordPress)#Database-model]] | ||
+ | |||
+ | === Afbeeldingen === | ||
+ | |||
+ | Zie [[Afbeeldingen & databasemodel (WordPress)]] | ||
+ | |||
+ | === Menu-items === | ||
+ | |||
+ | Zie [[Menu's (WordPress)]]. | ||
− | == URL | + | === Posting-URL === |
De URL van een posting (vanaf de root van de site) vind je in <code>wp_posts</code> in de kolom <code>post_name</code> [https://wordpress.stackexchange.com/questions/58625/where-is-permalink-info-stored-in-database]. | De URL van een posting (vanaf de root van de site) vind je in <code>wp_posts</code> in de kolom <code>post_name</code> [https://wordpress.stackexchange.com/questions/58625/where-is-permalink-info-stored-in-database]. | ||
− | == | + | === Screen Options === |
− | + | [https://wpperform.com/wordpress-screen-options/#:~:text=WordPress%20Screen%20Options%20are%20displayed,the%20database%20that%20powers%20WordPress.]: | |
− | + | WordPress Screen Options are displayed in a hanging tab in the upper right of the WordPress dashboard. Screen Options are user specific based on your login name. They're stored in table <code>wp_usermeta</code> | |
− | |||
− | Voorbeeld | + | ''' Voorbeeld''' |
<pre> | <pre> | ||
− | select | + | # |
− | + | # Change the number of products that is being displayed at 'all products' | |
− | + | ############################################################################ | |
− | + | # | |
− | + | # * Change the number of products for a specific user: The page doesn't load | |
− | + | # anymore to do this manually | |
− | from | + | # * Select user through "user_login", so it works equally well on development |
− | + | # environment and production environment | |
+ | # * Jeroen Strompf - Okt. 2020 | ||
+ | # | ||
+ | # | ||
+ | ############################################################################ | ||
+ | # Use the production database | ||
+ | ############################################################################ | ||
+ | # | ||
+ | use example_com; | ||
+ | |||
+ | |||
+ | ############################################################################ | ||
+ | # Read out the old value | ||
+ | ############################################################################ | ||
+ | # | ||
+ | select | ||
+ | wp_users.user_login, | ||
+ | wp_users.ID, | ||
+ | wp_usermeta.* | ||
+ | from | ||
+ | wp_users | ||
+ | join | ||
+ | wp_usermeta | ||
+ | on | ||
+ | wp_usermeta.user_id = wp_users.ID | ||
+ | where | ||
+ | user_login like "Jeroen" | ||
+ | and | ||
+ | meta_key like "edit_shop_order_per_page"; | ||
+ | |||
+ | |||
+ | ############################################################################ | ||
+ | # Change value | ||
+ | ############################################################################ | ||
+ | # | ||
+ | update | ||
+ | wp_usermeta | ||
+ | join | ||
+ | wp_users | ||
+ | on | ||
+ | wp_usermeta.user_id = wp_users.ID | ||
+ | set | ||
+ | meta_value=25 | ||
+ | where | ||
+ | wp_users.user_login = "Jeroen" | ||
+ | and | ||
+ | wp_usermeta.meta_key = "edit_shop_order_per_page"; | ||
+ | |||
+ | |||
+ | ############################################################################ | ||
+ | # Read out the new value | ||
+ | ############################################################################ | ||
+ | # | ||
+ | select | ||
+ | wp_users.user_login, | ||
+ | wp_users.ID, | ||
+ | wp_usermeta.* | ||
+ | from | ||
+ | wp_users | ||
join | join | ||
− | + | wp_usermeta | |
− | + | on | |
− | + | wp_usermeta.user_id = wp_users.ID | |
− | where | + | where |
− | + | user_login like "Jeroen" | |
− | + | and | |
− | + | meta_key like "edit_shop_order_per_page"; | |
− | |||
− | |||
</pre> | </pre> | ||
− | == | + | === Taxonomieën === |
+ | |||
+ | Zie [[Taxonomieën - Datamodel (WordPress)]] | ||
+ | |||
+ | === WooCommerce === | ||
+ | |||
+ | Zie [[WooCommerce - Datamodel]] | ||
− | + | === Yoast === | |
+ | |||
+ | Zie [[Yoast - Databasemodel]] | ||
+ | |||
+ | == Tabellen == | ||
+ | |||
+ | === wp_options & wp_postmeta === | ||
+ | |||
+ | Beide tabellen dienen voor 'extra' informatie die niet in een primaire tabel pastte, maar met een interessant verschil: | ||
+ | |||
+ | * wp_options: Naast een eigen ID, zijn er twee velden: {option_name; option_value} - Dus label-waarde-paren | ||
+ | * wp_postmeta: Naast een eigen ID, zijn er ''drie'' velden: {post_id; meta_key; meta_value} - Dus label-waarde-paren, ''gekoppeld'' aan een post_id. Zo'n post_id kan trouwens ook een meta_id zijn. Dat is bv. het geval bij WooCommerce-producten rondom afbeeldingen → attachments. | ||
+ | |||
+ | === wp_gf_entry === | ||
+ | |||
+ | Heeft betrekking op ''Gravity Forms'' | ||
+ | |||
+ | == Zie ook == | ||
+ | |||
+ | * [[ACF (Advanced Custom Fields, WordPress)#Database-model]] | ||
+ | * [[Bulkimport (WordPress)]] | ||
+ | * [[Categorieën (WordPress)]] | ||
+ | * [[Db-bulk (WordPress)]] | ||
+ | * [[Polylang (WordPress-plugin)]] | ||
+ | * [[Yoast - Databasemodel]] | ||
== Bronnen == | == Bronnen == | ||
* https://wordpress.stackexchange.com/questions/58625/where-is-permalink-info-stored-in-database | * https://wordpress.stackexchange.com/questions/58625/where-is-permalink-info-stored-in-database | ||
+ | * http://knl.s1/product/koolborstelset-ca-00-002-voor-bosch-2 | ||
+ | * https://stackoverflow.com/questions/36965352/woocommerce-finding-the-products-in-database | ||
+ | * https://deliciousbrains.com/wordpress-post-guids-sometimes-update | ||
+ | * https://pods.io/2013/07/17/dont-use-the-guid-field-ever-ever-ever |
Huidige versie van 10 sep 2022 om 09:46
Dit is het hoofdartikel rondom het databasemodel van WordPress. Dit it artikel is slechts een beginnetje. Zie sectie Zie ook voor meer.
Hoe vind je iets terug in de database?
Soms is het een uitermate lastig kunstje om te achterhalen waar iets in de database staat. In okt. 2020 had ik een casus die laat zien dat het niet altijd zo moeilijk hoeft te zijn.
Het probleem
- Waar staan menu-items in de database?
- Ik had ergens opgepikt dat dat via taxonomieën gaat, maar daar kan ik zo snel niets vinden.
Aanpak
- Verander een menu-items in iets unieks. Bv. "Merk" → "Merkzzz"
- Maak een db-dump
- Selecteer regels uit de db-dump met de string "Merkzzz":
less fr_fr_s1 | grep Merkzzz > merkzzz.txt
- Open merkzzz.txt in een editor. Schakel wordwrap uit. Het was nog steeds onleesbaar, maar het was wel duidelijk dat het ging om de tabellen "wp_posts" en "wp_yoast_indexable", en dat was genoeg
- Open tabel "wp_posts" in MySQL WorkBench en filter de output op "Merkzzz" - Klaar!
Velden
Meestal - maar niet altijd - hebben velden een globale naam. Maw., veld blablah in de ene tabel, is meestal hetzelfde veld blahblah in een andere tabel:
GUID's
WordPress maintains GUID-fields, like in wp_posts. These are exactly that: Global Unique IDentifiers. They were invented for feed-readers to keep track of what has been processed and what not. That they look like URLs, is completely irrelevant. You can update them after a migration, if you want, but frankly: Just ignore them [1], [2]
ID
- De centrale entititeit in een WordPress-database, is een post (tabel
wp_posts
). Een post heeft een PK, genaamdID
- Deze naam is helaas niet globaal: In tabel
wp_term_relationships
heet dit veld namelijkobject_id
- Ik kan het echter verkeerd hebben: Misschien wordt met object iets anders (algemeners?) bedoeld dan een post-id.
Objecten
Dit hoofdstuk benaderd het database vanuit objecten. Bv.: Waar vind ik alle WooCommerce-producteninformatie? Hoe zit de Kenmerk-taxonomie in elkaar?
ACF-velden (inclusief buttonbar)
Zie ACF (Advanced Custom Fields, WordPress)#Database-model
Afbeeldingen
Zie Afbeeldingen & databasemodel (WordPress)
Menu-items
Zie Menu's (WordPress).
Posting-URL
De URL van een posting (vanaf de root van de site) vind je in wp_posts
in de kolom post_name
[3].
Screen Options
[4]:
WordPress Screen Options are displayed in a hanging tab in the upper right of the WordPress dashboard. Screen Options are user specific based on your login name. They're stored in table wp_usermeta
Voorbeeld
# # Change the number of products that is being displayed at 'all products' ############################################################################ # # * Change the number of products for a specific user: The page doesn't load # anymore to do this manually # * Select user through "user_login", so it works equally well on development # environment and production environment # * Jeroen Strompf - Okt. 2020 # # ############################################################################ # Use the production database ############################################################################ # use example_com; ############################################################################ # Read out the old value ############################################################################ # select wp_users.user_login, wp_users.ID, wp_usermeta.* from wp_users join wp_usermeta on wp_usermeta.user_id = wp_users.ID where user_login like "Jeroen" and meta_key like "edit_shop_order_per_page"; ############################################################################ # Change value ############################################################################ # update wp_usermeta join wp_users on wp_usermeta.user_id = wp_users.ID set meta_value=25 where wp_users.user_login = "Jeroen" and wp_usermeta.meta_key = "edit_shop_order_per_page"; ############################################################################ # Read out the new value ############################################################################ # select wp_users.user_login, wp_users.ID, wp_usermeta.* from wp_users join wp_usermeta on wp_usermeta.user_id = wp_users.ID where user_login like "Jeroen" and meta_key like "edit_shop_order_per_page";
Taxonomieën
Zie Taxonomieën - Datamodel (WordPress)
WooCommerce
Yoast
Tabellen
wp_options & wp_postmeta
Beide tabellen dienen voor 'extra' informatie die niet in een primaire tabel pastte, maar met een interessant verschil:
- wp_options: Naast een eigen ID, zijn er twee velden: {option_name; option_value} - Dus label-waarde-paren
- wp_postmeta: Naast een eigen ID, zijn er drie velden: {post_id; meta_key; meta_value} - Dus label-waarde-paren, gekoppeld aan een post_id. Zo'n post_id kan trouwens ook een meta_id zijn. Dat is bv. het geval bij WooCommerce-producten rondom afbeeldingen → attachments.
wp_gf_entry
Heeft betrekking op Gravity Forms
Zie ook
- ACF (Advanced Custom Fields, WordPress)#Database-model
- Bulkimport (WordPress)
- Categorieën (WordPress)
- Db-bulk (WordPress)
- Polylang (WordPress-plugin)
- Yoast - Databasemodel
Bronnen
- https://wordpress.stackexchange.com/questions/58625/where-is-permalink-info-stored-in-database
- http://knl.s1/product/koolborstelset-ca-00-002-voor-bosch-2
- https://stackoverflow.com/questions/36965352/woocommerce-finding-the-products-in-database
- https://deliciousbrains.com/wordpress-post-guids-sometimes-update
- https://pods.io/2013/07/17/dont-use-the-guid-field-ever-ever-ever