Al desarrollar alrededor de Easy Digital Downloads, es posible que necesites consultar la base de datos para obtener datos de productos. Este documento mostrará varios ejemplos de cómo hacerlo correctamente.
Obteniendo un Producto Individual
La mejor manera de obtener información sobre un producto individual es usar la clase EDD_Download. Acepta un
download_id y devuelve un objeto con información sobre la descarga. Ejemplo:
$download = new EDD_Download( 109 );
Esto devolvería un 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
)
Una vez que tengas el objeto, hay una gran variedad de métodos que se pueden ejecutar sobre él para obtener información como el precio, variaciones, etc.
Documentación completa para EDD_Download aquí.
Obteniendo Múltiples Productos
Las descargas son un tipo de contenido personalizado de WordPress, por lo que es posible obtener los IDs de múltiples descargas usando
get_posts(). Si especificas el parámetro de campos correctamente, entonces get_posts solo obtendrá los IDs y la consulta será mucho más rápida. También necesitarás especificar al menos download para el post_type. Ejemplo:
$args = array(
'fields' => 'ids',
'post_type' => 'download',
);
$downloads = get_posts( $args );
Puedes usar cualquier opción que desees en
get_posts() para acotar tu consulta.
Documentación completa para get_posts() aquí.
Una opción adicional que no se encuentra en la documentación de
get_posts() se llama no_found_rows(). Esto elimina algunos datos necesarios para la paginación, pero acelera drásticamente tu consulta. Si necesitas paginación, no uses esta opción. Si no necesitas paginación, se vería así:
$args = array(
'fields' => 'ids',
'post_type' => 'download',
'no_found_rows' => true,
);
$downloads = get_posts( $args );
La consulta anterior devolverá un array de download_ids como este:
Array
(
[0] => 109
[1] => 82
[2] => 79
[3] => 61
[4] => 42
)
Trabajando con Múltiples Productos
Una vez que tengas un array de download_ids, puedes simplemente iterar sobre el array creando objetos EDD_Download como esto:
foreach ( $downloads as $key => $download_id ) {
$download = new EDD_Download( $download_id );
// do whatever you wish with each object
}
