Visão Geral
O sistema de Exportação do Easy Digital Downloads fornece uma estrutura robusta para a criação de exportações de dados personalizadas. Esta documentação abrange a classe base Exporter e como implementar exportadores personalizados.
Requisitos
- WordPress 6.2+
- Easy Digital Downloads 3.3.8+
- PHP 7.4+
Classe Base de Exportação
A classe Exporter está localizada no namespace EDD\Admin\Exports\Exporters e serve como a base para toda a funcionalidade de exportação do EDD.
Métodos Obrigatórios
Ao estender a classe Exporter, você deve implementar estes métodos abstratos:
abstract protected function get_export_type(): string;
abstract protected function get_data(): array;
abstract protected function get_data_headers(): array;
abstract protected function get_total(): int;
abstract public function set_properties( $request ): void;
Criando um Exportador Personalizado
1. Estrutura Básica
Crie uma classe que estenda a classe Exporter:
<?php
/**
* Custom Exporter class.
*/
class CustomExporter extends EDD\Admin\Exports\Exporters\Exporter {
/**
* Get the export type.
*
* @return string The export type.
*/
protected function get_export_type(): string {
return 'custom_export';
}
/**
* Set the properties.
*
* @param array $request The request.
* @return void
*/
public function set_properties( $request ): void {
$this->start = isset( $request['custom-export-start'] )
? sanitize_text_field( $request['custom-export-start'] )
: '';
$this->end = isset( $request['custom-export-end'] )
? sanitize_text_field( $request['custom-export-end'] )
: '';
}
/**
* Get the data headers.
*
* @return array The data headers.
*/
protected function get_data_headers(): array {
return array(
'id' => __( 'ID', 'your-text-domain' ),
'status' => __( 'Status', 'your-text-domain' ),
);
}
protected function get_data(): array {
$data = array();
$args = array_merge(
array(
'number' => $this->per_step,
'offset' => ( $this->step * $this->per_step ) - $this->per_step,
),
$this->get_base_args()
);
// Your data retrieval logic here
$items = edd_get_orders( $args );
foreach ( $items as $item ) {
$data[] = array(
'id' => $item->id,
'status' => $item->status,
);
}
return $data;
}
/**
* Get the total.
*
* @return int The total.
*/
protected function get_total(): int {
return edd_count_orders( $this->get_base_args() );
}
/**
* Get the base args.
*
* @return array The base args.
*/
private function get_base_args(): array {
$args = array();
if ( ! empty( $this->start ) || ! empty( $this->end ) ) {
$args['date_query'] = $this->get_date_query();
}
return $args;
}
}
2. Registrando Seu Exportador
Crie uma classe para lidar com o registro e a exibição do formulário:
/**
* Register the custom exporter.
*
* @param \EDD\Admin\Exports\Registry $registry The registry instance.
* @return void
*/
function custom_register_export( \EDD\Admin\Exports\Registry $registry ) {
$registry->register_exporter(
'custom_export',
array(
'label' => __( 'Custom Export', 'your-text-domain' ),
'description' => __( 'Export custom data.', 'your-text-domain' ),
'class' => CustomExporter::class,
'class_path' => __DIR__ . '/class-custom-export.php', // Change to your export class path.
'button' => __( 'Export Data', 'your-text-domain' ),
)
);
}
add_action( 'edd_export_init', 'custom_register_export' );
/**
* Display the custom export form.
*
* @param string $exporter_id The exporter ID.
* @return void
*/
function custom_export_form( $exporter_id ) {
if ( 'custom_export' !== $exporter_id ) {
return;
}
$from_to = new \EDD\HTML\FromTo(
array(
'legend' => __( 'Custom Export Date', 'your-text-domain' ),
'id' => 'order-export',
)
);
$from_to->output();
?>
<label for="edd_export_custom_status" class="screen-reader-text"><?php esc_html_e( 'Select Status', 'your-text-domain' ); ?></label>
<?php
$statuses = array();
foreach ( edd_get_payment_statuses() as $status ) {
if ( 'publish' === $status ) {
continue;
}
$statuses[ $status ] = edd_get_payment_status_label( $status );
}
$select = new \EDD\HTML\Select(
array(
'id' => 'edd_export_custom_status',
'name' => 'status',
'show_option_all' => __( 'All Statuses', 'your-text-domain' ),
'show_option_none' => false,
'selected' => false,
'options' => $statuses,
)
);
$select->output();
}
add_action( 'edd_export_form', 'custom_export_form' );
Com o novo registro de exportação, assim que você tiver sua classe de exportação configurada junto com seu formulário, o EDD cuidará do processo de exportação automaticamente.
Fontes:
- Classe abstrata EDD\Admin\Exports\Exporters\Exporter
- Registro de exportação
- Classe APIRequests utilizando o novo exportador como exemplo
