Jak komunikować się z bazą danych w WordPressie

W WordPressie jest mnóstwo funkcji, za pomocą których można coś wyciągnąć z bazy danych. Jeśli chcemy wyciągnąć z bazy wpisy, korzystamy z funkcji get_posts. Jeśli chcemy wyciągnąć pole własne, korzystamy z funkcji get_post_meta. Na podstawie parametrów tych funkcji WordPress buduje zapytanie SQL i wysyła je do bazy danych, po czym zwraca dane. Na ogół to wystarczy.

Bywają jednak sytuacje, gdy jakaś wtyczka tworzy nową tabelę w bazie danych i coś do tej tabeli zapisuje, a my chcemy z tych danych skorzystać. Albo trzeba wysłać do bazy danych bardziej skomplikowane zapytanie i trzeba by się nieźle nagimnastykować, żeby skorzystać z funkcji WordPressa. W obu przypadkach wygodne jest skonstruowanie własnego zapytania SQL.

Aby wykonać zapytanie SQL, należy skorzystać z globalnego obiektu $wpdb. Za pomocą jego metod bardzo łatwo jest wyciągnąć wszystkie interesujące nas dane, pod warunkiem, że znamy podstawy SQL.

Przykład zastosowania obiektu $wpdb:

function my_custom_function($number) {
  global $wpdb;

  $sql = "SELECT COUNT({$wpdb->prefix}postmeta.meta_value) as city_count, {$wpdb->prefix}postmeta.meta_value FROM {$wpdb->prefix}posts INNER JOIN {$wpdb->prefix}postmeta ON {$wpdb->prefix}posts.ID = {$wpdb->prefix}postmeta.post_id WHERE {$wpdb->prefix}postmeta.meta_key='geolocation_city' AND {$wpdb->prefix}posts.post_type='job_listing' AND {$wpdb->prefix}posts.post_status='publish' GROUP BY {$wpdb->prefix}postmeta.meta_value ORDER BY city_count DESC LIMIT %d";

  $sql = $wpdb->prepare($sql, $number);
  $cities = $wpdb->get_results($sql , ARRAY_A);

  foreach ($cities as $city) {
    echo $city['meta_value'] . ': ' . $city['city_count'];
  }
}

Metoda prepare zapobiega atakowi SQL injection. Należy jej użyć, jeśli w zapytaniu korzystamy z danych pochodzących od użytkownika. Takim danym nigdy nie należy ufać.

Metoda get_results zwraca wyniki zapytania. W przykładzie zwracana jest tablica tablic, którą można potem odczytać np. w pętli foreach.

Inne metody klasy wpdb, służące do pobierania danych:

  • get_var: zwraca pojedynczą wartość
  • get_row: zwraca pojedynczy wiersz
  • get_col: zwraca pojedynczą kolumnę

Więcej informacji na temat klasy wpdb znajdziesz tu: https://developer.wordpress.org/reference/classes/wpdb/.

Pani Marta
Jestem Marta. Pani Marta. Od kilku lat pracuję w WordPressie i ciągle jestem pod wrażeniem jego możliwości. Na moim blogu dzielę się prostymi sposobami na bezwtyczkowe ulepszenie swojej strony. Jeśli brakuje Ci czegoś w tym wpisie lub chcesz, abym poruszyła temat, na którym Ci zależy, daj znać w komentarzu!

Dodaj komentarz

*

*

*

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *