Een Addofy-module schrijven
Een module is een class die Addofy voor je opstart. Je kunt hem aan- en uitzetten in Addofy > Modules, hij krijgt een eigen instellingenkaart en draait alleen op de schermen die hij noemt. Heb je er nog geen gebouwd, begin dan met de snelstart.
Een complete module
use AddoBack\Core\Screen;
use AddoBack\Modules\AbstractModule;
final class My_Reports_Module extends AbstractModule {
public function id(): string {
return 'myplugin_reports'; // Prefix it with your plugin slug.
}
public function label(): string {
return __( 'Reports', 'myplugin' );
}
public function description(): string {
return __( 'Adds a report card to the customer screen.', 'myplugin' );
}
public function default_enabled(): bool {
return true;
}
public function screens(): array {
return array( 'woocommerce_page_adba-customers' ); // Empty array: every screen.
}
public function settings_schema(): array {
return array(
'limit' => array(
'type' => 'number',
'label' => __( 'Rows', 'myplugin' ),
'default' => 5,
),
);
}
public function register(): void {
// Hooks that must exist on every request (REST routes, admin_post handlers, filters).
}
public function on_screen( Screen $screen ): void {
$limit = (int) $this->setting( 'limit', 5 );
adba( 'assets' )->enqueue_external( 'myplugin-reports', plugins_url( 'reports.js', __FILE__ ), array( 'adba-core' ) );
}
}
Registreer hem vanuit je hoofdpluginbestand. De class breidt een Addofy-class uit, dus zet hem in een eigen bestand en laad dat bestand alleen als Addofy actief is: een plugin die vóór Addofy laadt, zou anders een fout geven.
add_action( 'plugins_loaded', static function () {
if ( function_exists( 'adba_register_module' ) ) {
require_once __DIR__ . '/includes/class-my-reports-module.php';
adba_register_module( My_Reports_Module::class );
}
}, 5 );
Wat elk onderdeel doet
register()draait bij elk request. Gebruik het voor hooks die altijd moeten bestaan, zoals REST-routes,admin_post-handlers en filters.on_screen()draait alleen op de schermen uitscreens(). Gebruik het voor assets, meldingen en data van dat scherm.- De instellingen van je module staan onder
module_settings.{module id}in de Addofy-instellingen, dus ze gaan mee met de export en import van Addofy. Lees ze met$this->setting( $key, $default ). - Veldtypes voor het instellingenschema:
toggle,select,radio,text,number,role_matrix,choice_map, plus je eigen (zieadba_register_fieldsin de instellingengids). requires()geeft de module-id's die eerst moeten starten.conditions()geeft omgevingscontroles:woocommerce,acfof je eigen viaadba_module_condition.- Een veld in het instellingenschema met
'experimental' => truekrijgt het label Experimenteel op de tab Modules.
Fouten breken de admin nooit
Een module die een fout geeft in register() of on_screen(), wordt voor dat request overgeslagen en beheerders zien één melding. De rest van de admin blijft werken.
Timing
| Moment | Hook | Gebruik het voor |
|---|---|---|
plugins_loaded prioriteit 20 | adba_modules | Addofy verzamelt de moduleclasses (gebruik adba_register_module() hiervoor). |
Na de register() van elke module | adba_module_booted | Wachten op een andere module. |
| Na het opstarten | adba_loaded | Alles wat de container nodig heeft. |
current_screen, Addofy actief | adba_screen | Schermspecifiek werk: assets, meldingen, data. |
admin_bar_menu prioriteit 1, 100 en PHP_INT_MAX | native | Addofy voegt de zijbalkschakelaar toe op 1, zijn eigen nodes op 100 en ruimt het accountmenu op (Uitloggen als laatste) op PHP_INT_MAX. Hook onder of boven 100 om je nodes ervoor of erna te plaatsen. |
Gerelateerd
Klaar om het te proberen?