Btw
Je winkelwagen

Je winkelwagen is leeg.

Recept: een actie aan de popup met snelle bestelacties toevoegen

Doel: een nieuw onderdeel in de popup met snelle bestelacties, met je eigen velden en een opslagactie die de WooCommerce-API gebruikt.

De actie

Een actie implementeert AddoBack\Modules\OrderActions\QuickActionInterface. De popup en de REST-route pikken geregistreerde acties zonder verdere wijzigingen op.

  • id(): stabiel id, gebruikt in de REST-route. Kleine letters, cijfers, streepjes en underscores.
  • label(): label van de opslaan-knop. Leeg voor een onderdeel zonder opslaan, zoals links.
  • section(): kop van het popuponderdeel.
  • priority(): positie in de popup, lager komt eerst.
  • available( $order, $user ): of de actie wordt aangeboden voor deze bestelling en gebruiker. Een ontbrekende actie blijft uit de popup en wordt door de REST-route geweigerd.
  • render( $order ): de velden, geëscaped. Veldnamen zijn gewoon, zonder prefix.
  • handle( $order, $input ): voert de actie uit. Geef een array met minstens message terug, of een WP_Error.
use AddoBack\Modules\OrderActions\QuickActionInterface;

final class Priority_Action implements QuickActionInterface {

	public function id(): string {
		return 'myplugin_priority';
	}

	public function label(): string {
		return __( 'Save priority', 'myplugin' );
	}

	public function section(): string {
		return __( 'Priority', 'myplugin' );
	}

	public function priority(): int {
		return 50;
	}

	public function available( \WC_Order $order, \WP_User $user ): bool {
		return user_can( $user, 'edit_shop_orders' );
	}

	public function render( \WC_Order $order ): string {
		$current = (string) $order->get_meta( '_myplugin_priority' );
		return '<select name="level"><option value="low"' . selected( $current, 'low', false ) . '>' . esc_html__( 'Low', 'myplugin' )
			. '</option><option value="high"' . selected( $current, 'high', false ) . '>' . esc_html__( 'High', 'myplugin' ) . '</option></select>';
	}

	public function handle( \WC_Order $order, array $input ) {
		$level = isset( $input['level'] ) && 'high' === $input['level'] ? 'high' : 'low';
		$order->update_meta_data( '_myplugin_priority', $level );
		$order->save(); // The same WooCommerce API as the order screen, so all hooks fire.
		return array( 'message' => __( 'Priority saved.', 'myplugin' ) );
	}
}

Registreren

add_filter( 'adba_order_quick_actions', static function ( array $actions ) {
	$actions[] = new Priority_Action();
	return $actions;
} );

Gerelateerd

Klaar om je AI te koppelen aan echte tools?

Start gratis proefperiode