Podczas tworzenia wokół Easy Digital Downloads możesz potrzebować zapytać bazę danych o dane produktów. Ten dokument pokaże kilka przykładów, jak to zrobić poprawnie.
Pobieranie pojedynczego produktu
Najlepszym sposobem na uzyskanie informacji o pojedynczym produkcie jest użycie klasy EDD_Download. Akceptuje ona
download_id i zwraca obiekt z informacjami o pobranym pliku.
$download = new EDD_Download( 109 );
To zwróci obiekt podobny do tego:
EDD_Download Object
(
[ID] => 109
[price:EDD_Download:private] =>
[prices:EDD_Download:private] =>
[files:EDD_Download:private] =>
[file_download_limit:EDD_Download:private] =>
[type:EDD_Download:private] =>
[bundled_downloads:EDD_Download:private] =>
[sales:EDD_Download:private] =>
[earnings:EDD_Download:private] =>
[notes:EDD_Download:private] =>
[sku:EDD_Download:private] =>
[button_behavior:EDD_Download:private] =>
[post_author] => 2
[post_date] => 2016-03-22 13:30:29
[post_date_gmt] => 2016-03-22 13:30:29
[post_content] => Buy my mp3!
[post_title] => My MP3
[post_excerpt] =>
[post_status] => publish
[comment_status] => closed
[ping_status] => closed
[post_password] =>
[post_name] => my-mp3
[to_ping] =>
[pinged] =>
[post_modified] => 2016-03-22 13:30:29
[post_modified_gmt] => 2016-03-22 13:30:29
[post_content_filtered] =>
[post_parent] => 0
[guid] => https://edd.dev/?post_type=download&p=109
[menu_order] => 0
[post_mime_type] =>
[comment_count] => 0
[filter] => raw
[post_type] => download
)
Gdy masz już obiekt, możesz na nim uruchomić szeroką gamę metod, aby uzyskać informacje takie jak cena, warianty itp.
Pełna dokumentacja EDD_Download tutaj.
Pobieranie wielu produktów
Pobrane pliki to niestandardowy typ treści WordPress, więc możliwe jest uzyskanie identyfikatorów wielu pobranych plików za pomocą
get_posts(). Jeśli poprawnie określisz parametr pól, get_posts pobierze tylko identyfikatory, a zapytanie będzie znacznie szybsze. Musisz również co najmniej określić download dla typu posta. Przykład:
$args = array(
'fields' => 'ids',
'post_type' => 'download',
);
$downloads = get_posts( $args );
Możesz użyć dowolnej opcji, którą chcesz w
get_posts(), aby zawęzić zapytanie.
Pełna dokumentacja get_posts() tutaj.
Jedną dodatkową opcją, której nie znajdziesz w dokumentacji
get_posts(), jest no_found_rows(). Usuwa ona niektóre dane wymagane do paginacji, ale znacznie przyspiesza zapytanie. Jeśli potrzebujesz paginacji, nie używaj tej opcji. Jeśli nie potrzebujesz paginacji, będzie wyglądać tak:
$args = array(
'fields' => 'ids',
'post_type' => 'download',
'no_found_rows' => true,
);
$downloads = get_posts( $args );
Powyższe zapytanie zwróci tablicę identyfikatorów pobranych plików, taką jak ta:
Array
(
[0] => 109
[1] => 82
[2] => 79
[3] => 61
[4] => 42
)
Praca z wieloma produktami
Gdy masz już tablicę identyfikatorów pobranych plików, możesz po prostu iterować po tablicy, tworząc obiekty EDD_Download w następujący sposób:
foreach ( $downloads as $key => $download_id ) {
$download = new EDD_Download( $download_id );
// do whatever you wish with each object
}
