Ao construir em torno do Easy Digital Downloads, você pode achar necessário consultar o banco de dados para obter dados de produtos. Este documento mostrará vários exemplos de como fazer isso corretamente.
Obtendo um Único Produto
A melhor maneira de obter informações sobre um único produto é usar a classe EDD_Download. Ela aceita um
download_id e retorna um objeto com informações sobre o download. Exemplo:
$download = new EDD_Download( 109 );
Isso retornaria um objeto como este:
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
)
Uma vez que você tenha o objeto, há uma grande variedade de métodos que podem ser executados nele para obter informações como preço, variações, etc.
Documentação completa para EDD_Download aqui.
Obtendo Múltiplos Produtos
Downloads são um tipo de conteúdo personalizado do WordPress, portanto, é possível obter os IDs de vários downloads usando
get_posts(). Se você especificar o parâmetro de campos corretamente, então get_posts obterá apenas os IDs, e a consulta será muito mais rápida. Você também precisará especificar pelo menos download para o post_type. Exemplo:
$args = array(
'fields' => 'ids',
'post_type' => 'download',
);
$downloads = get_posts( $args );
Você pode usar qualquer opção que desejar em
get_posts() para refinar sua consulta.
Documentação completa para get_posts() aqui.
Uma opção adicional não encontrada na documentação para
get_posts() é chamada no_found_rows(). Isso remove alguns dados necessários para paginação, mas acelera dramaticamente sua consulta. Se você precisar de paginação, não use esta opção. Se você não precisar de paginação, ficaria assim:
$args = array(
'fields' => 'ids',
'post_type' => 'download',
'no_found_rows' => true,
);
$downloads = get_posts( $args );
A consulta acima retornará um array de download_ids como este:
Array
(
[0] => 109
[1] => 82
[2] => 79
[3] => 61
[4] => 42
)
Trabalhando Com Múltiplos Produtos
Uma vez que você tenha um array de download_ids, você pode simplesmente iterar sobre o array criando objetos EDD_Download como este:
foreach ( $downloads as $key => $download_id ) {
$download = new EDD_Download( $download_id );
// do whatever you wish with each object
}
