From ff260a5d55724b7eb249a102d3c0ee58b74c8bcf Mon Sep 17 00:00:00 2001 From: Ben Leonard Date: Wed, 27 Aug 2025 16:16:55 +0100 Subject: [PATCH] Added functionality to provide stylesheets that the main theme stylesheets are dependent on. --- includes/class-asset-enqueue.php | 40 ++++++++++++++++++- theme-template/functions.php | 3 ++ .../register-stylesheet-dependencies.php | 14 +++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 theme-template/includes/register-stylesheet-dependencies.php diff --git a/includes/class-asset-enqueue.php b/includes/class-asset-enqueue.php index 355e558..49832e9 100644 --- a/includes/class-asset-enqueue.php +++ b/includes/class-asset-enqueue.php @@ -21,6 +21,13 @@ final class Asset_Enqueue { */ private static $instance = null; + /** + * Array of stylesheet handles to be used as dependancies for enqueued stylesheets. + * + * @var string[] + */ + private $stylesheet_dependencies = array(); + /** * Initializes the process. */ @@ -149,8 +156,39 @@ private function enqueue_stylesheets( string $entrypoint ) { } $asset = $manifest->getManifest()[ $entrypoint ]; - wp_enqueue_style( $asset['name'], $style['url'], array(), $style['hash'] ); + wp_enqueue_style( $asset['name'], $style['url'], $this->stylesheet_dependencies, $style['hash'] ); + } + } + + /** + * Add a dependancy to be used for main stylesheets. + * + * @param string $handle A stylesheet handle. + * @param string $src A stylesheet source. + * @param array $dependencies (Optional) an optional array of stylesheet handles. + * @param string $version (Optional) String specifying stylesheet version number. + * @param string $media (Optional) The media for which this stylesheet has been defined. Default 'all'. Accepts media types like 'all', 'print' and 'screen', or media queries like '(orientation: portrait)' and '(max-width: 640px)'. + */ + public function add_stylesheet_dependency( string $handle, string $src, array $dependencies = array(), string $version = '1', string $media = 'all' ) { + if ( in_array( $handle, $this->stylesheet_dependencies, true ) ) { + return; } + + add_action( + 'wp_enqueue_scripts', + function () use ( $handle, $src, $dependencies, $version, $media ) { + wp_register_style( + $handle, + $src, + $dependencies, + $version, + $media + ); + }, + 5 + ); + + array_push( $this->stylesheet_dependencies, $handle ); } /** diff --git a/theme-template/functions.php b/theme-template/functions.php index 740f261..d4c8e62 100644 --- a/theme-template/functions.php +++ b/theme-template/functions.php @@ -28,3 +28,6 @@ // Register any scripts needed. require_once __DIR__ . '/includes/register-scripts.php'; + +// Register any stylesheet depandancies. +require_once __DIR__ . '/includes/register-stylesheet-dependencies.php'; diff --git a/theme-template/includes/register-stylesheet-dependencies.php b/theme-template/includes/register-stylesheet-dependencies.php new file mode 100644 index 0000000..548a8ba --- /dev/null +++ b/theme-template/includes/register-stylesheet-dependencies.php @@ -0,0 +1,14 @@ +add_stylesheet_dependency( +// 'typekit', +// 'https://use.typekit.net/example.css' +// );