Improve wp acorn compability

This commit is contained in:
Jan-Niclas Loosen
2026-06-29 19:54:12 +02:00
parent 7f3fd36186
commit 102abe7927
28 changed files with 4090 additions and 1980 deletions
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace AcornPlugin\Acorn;
/**
* Elects a single Acorn booter per request across all Acorn plugins.
*
* did_action() is a read-only probe of WordPress' action bookkeeping — unlike
* Roots\Acorn\Application::getInstance(), which force-creates and installs an
* empty container as the global singleton. The action name is a cross-plugin
* contract: every Acorn plugin in the installation must use the same.
*/
final class BootCoordinator
{
public const BOOTED_ACTION = 'acorn/booted';
public function shouldBoot(): bool
{
return ! did_action(self::BOOTED_ACTION);
}
public function markBooted(): void
{
// Deliberately unprefixed: BOOTED_ACTION is a shared cross-plugin
// contract, so every cooperating Acorn plugin fires the same hook.
// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.DynamicHooknameFound
do_action(self::BOOTED_ACTION);
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace AcornPlugin\Acorn;
use Illuminate\Support\Facades\Blade;
/**
* Emits Livewire's frontend assets exactly once, from the plugin that owns the
* Acorn boot. Livewire v4's @livewireScripts self-initialises from the data-*
* attributes on the injected script.
* WordPress never dispatches Laravel's RequestHandled event, so the
* directives must be echoed into wp_head/wp_footer by hand.
*/
final class LivewireAssets
{
public static function registerOnce(): void
{
// Livewire renders its own trusted <style>/<script> markup — escaping it
// would corrupt the output, so the EscapeOutput sniff is suppressed here.
add_action('wp_head', static function (): void {
echo Blade::render('@livewireStyles'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
});
add_action('wp_footer', static function (): void {
echo Blade::render('@livewireScripts'); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
});
}
}