Btw
Je winkelwagen

Je winkelwagen is leeg.

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 uit screens(). 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 (zie adba_register_fields in de instellingengids).
  • requires() geeft de module-id's die eerst moeten starten. conditions() geeft omgevingscontroles: woocommerce, acf of je eigen via adba_module_condition.
  • Een veld in het instellingenschema met 'experimental' => true krijgt 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

MomentHookGebruik het voor
plugins_loaded prioriteit 20adba_modulesAddofy verzamelt de moduleclasses (gebruik adba_register_module() hiervoor).
Na de register() van elke moduleadba_module_bootedWachten op een andere module.
Na het opstartenadba_loadedAlles wat de container nodig heeft.
current_screen, Addofy actiefadba_screenSchermspecifiek werk: assets, meldingen, data.
admin_bar_menu prioriteit 1, 100 en PHP_INT_MAXnativeAddofy 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 je AI te koppelen aan echte tools?

Start gratis proefperiode