Databasemodel (WordPress)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

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!

Fields

GUID's

WordPress maintains GUID-fields, like in wp_posts. I think it's okay to update them [1]

Functies

Menu-items

Menu-items zijn posts van het type nav_menu_item:

select * from wp_posts where post_type="nav_menu_item";

Posting-URL

De URL van een posting (vanaf de root van de site) vind je in wp_posts in de kolom post_name [2].

Screen Options

[3]:

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";    

WooCommerce-producten

WooCommerce-productinformatie, vind je voornamelijk op twee plekken [4]:

  • wp_posts
  • wp_postmeta

Voorbeeld: Selecteer de belangrijkste gegevens uit wp_posts en de SKU's uit wp_postmeta:

select 
    wp_posts.ID			as post_id,
    wp_posts.post_title		as post_title,
    wp_posts.post_name		as slug,
    wp_posts.guid		as guid,
    wp_postmeta.meta_value	as sku
from 
    wp_posts
join
    wp_postmeta
    on
    wp_posts.ID = wp_postmeta.post_id
where 
    post_type="product"
    and
    post_status="publish"
    and
    meta_key="_sku";

WooCommerce Shop-page widgets

De widgets/filters op de shop page, worden gecodeerd in tabel wp_options in een paar velden met serialised content:

select option_value from wp_options where option_name = "widget_woocommerce_product_categories"   # Category-widget
select option_value from wp_options where option_name = "widget_woocommerce_layered_nav"          # Attribute-widgets

Tabellen

Zie ook

Bronnen