Recept: een zoekprovider aan de Addofy-zoekfunctie toevoegen
Doel: resultaten uit je eigen data verschijnen in de Addofy-zoekfunctie en de palette, in een eigen groep.
De provider
Een provider implementeert AddoBack\Modules\Search\SearchProviderInterface. Hij heeft vier methodes.
use AddoBack\Modules\Search\SearchProviderInterface;
final class Ticket_Search_Provider implements SearchProviderInterface {
public function id(): string {
return 'myplugin_ticket'; // Stable. Also the value of the "types" REST argument.
}
public function label(): string {
return __( 'Tickets', 'myplugin' ); // Group heading.
}
public function available(): bool {
return current_user_can( 'manage_options' ); // Who may search this provider at all.
}
public function search( string $query, int $limit ): array {
$results = array();
foreach ( myplugin_find_tickets( $query, $limit ) as $ticket ) {
$results[] = array(
'type' => 'myplugin_ticket',
'id' => (string) $ticket->id,
'title' => $ticket->subject,
'subtitle' => $ticket->customer,
'url' => admin_url( 'admin.php?page=myplugin&ticket=' . $ticket->id ),
'badge' => $ticket->status,
);
}
return $results;
}
}
Registreren
add_filter( 'adba_search_providers', static function ( array $providers ) {
$providers[] = new Ticket_Search_Provider();
return $providers;
} );
Regels om aan te houden
- De provider bepaalt zelf wie hem mag doorzoeken, in
available(). Addofy geeft geen toegang. $queryis al getrimd en bestaat uit minstens twee tekens.- Geef nooit meer dan
$limitresultaten terug. - Exacte treffers, zoals een bestelnummer of een SKU, komen eerst.
- Een resultaat heeft
type,id,title,subtitle,urlenbadge. Een optioneletonekleurt de badge:neutral,info,success,warningofdanger.
Optioneel: subfilters
Implementeer ook FilterableSearchProviderInterface om subfilters aan te bieden, zoals een status. Die voegt filters() toe (sleutel naar label en opties) en search_filtered( $query, $limit, $filters ). Een provider die alleen de basisinterface implementeert, blijft werken; hij heeft alleen geen subfilters.
Gerelateerd
- Hooks voor zoeken en palette:
adba_search_providers,adba_search_filtersenadba_search_result. - JavaScript-API: de filter
adba.search.resultswijzigt resultaten in de browser.
Klaar om het te proberen?