Podczas pobierania informacji z bazy danych WordPressa wolę unikać bezpośrednich zapytań do bazy danych, ale zdarzają się sytuacje, w których mogą być przydatne (i ważne jest, aby zostało to zrobione prawidłowo).
Jednym z przypadków użycia, w których może to być pomocne, jest pobranie zestawu danych jednego typu. Przykład: załóżmy, że musisz załadować wszystkie niestandardowe pola WordPress.
W chwili pisania tego tekstu nie ma funkcji, o której wiem, że wykona to zadanie, więc oto, w jaki sposób wysyłam zapytanie do bazy danych, aby to zrobić.
Załaduj wszystkie niestandardowe pola WordPress
Należy zwrócić uwagę na kilka kwestii dotyczących pól niestandardowych, które są powiązane z danym postem:
- pola niestandardowe są przechowywane w metadanych posta,
- pola niestandardowe są uważane za prywatne, dlatego są poprzedzone podkreśleniem,
- Standardy kodowania WordPressa tego nie polubią (więc może być konieczne zignorowanie standardów)
Możesz przeczytać o nich wszystko w Kodeksie.
I tak, łatwo jest uzyskać wszystkie niestandardowe informacje dla jednego posta. Ale jeśli pracujesz nad projektem, w którym musisz pobrać wszystkie pola niestandardowe, a mianowicie te, które są prywatne, musisz upewnić się, że pytasz o ciągi, które zaczynają się od podkreślenia.
Aby załadować wszystkie niestandardowe pola WordPress do bazy danych, oto zapytanie, którego używam :
<?php
function get_the_custom_fields() {
global $wpdb;
$results = $wpdb->get_results(
$wpdb->prepare(
"
SELECT meta_key, meta_value
FROM $wpdb->postmeta
WHERE meta_key REGEXP '%s'
", '^[_]') );
return $results;
}
Kilka rzeczy, o których należy pamiętać w powyższym zapytaniu:
- Korzystam z funkcji przygotowania przed get_results. To jest dla parametryzacji i bezpieczeństwa. Jeśli to dla Ciebie nowość, polecam przeczytanie tego artykułu.
- Zwraca wszystkie klucze meta i wartości meta w tablicy,
- W zależności od liczby rekordów, które chcesz zwrócić, może to zająć trochę czasu (i powinno być wykonywane w partiach).
Wreszcie, dla tych, którzy są ciekawi, indeksy nie istnieją w kolumnie meta_value, ale w kolumnie meta_key.
Kolumny w tabeli Post Meta z indeksami.
Jeśli więc zdecydujesz się zmodyfikować zapytanie i chcesz użyć kolumn, które mają indeksy, odnieś się do meta_id, post_id i meta_key.