Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wearerequired/h2push
Sends Link headers to bring HTTP/2 Server Push for scripts and styles to WordPress.
https://github.com/wearerequired/h2push
wordpress wordpress-plugin
Last synced: 5 days ago
JSON representation
Sends Link headers to bring HTTP/2 Server Push for scripts and styles to WordPress.
- Host: GitHub
- URL: https://github.com/wearerequired/h2push
- Owner: wearerequired
- License: gpl-2.0
- Created: 2017-10-06T13:03:48.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-01T03:05:38.000Z (9 months ago)
- Last Synced: 2024-10-12T23:26:29.780Z (about 1 month ago)
- Topics: wordpress, wordpress-plugin
- Language: PHP
- Homepage:
- Size: 82 KB
- Stars: 5
- Watchers: 3
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# HTTP/2 Server Push
[![PHPUnit Tests](https://github.com/wearerequired/h2push/actions/workflows/phpunit-tests.yml/badge.svg)](https://github.com/wearerequired/h2push/actions/workflows/phpunit-tests.yml) [![Coding Standards](https://github.com/wearerequired/h2push/actions/workflows/coding-standards.yml/badge.svg)](https://github.com/wearerequired/h2push/actions/workflows/coding-standards.yml)
Sends Link headers to bring HTTP/2 Server Push for scripts and styles to WordPress. Falls back to `` element if headers are already sent.
Provides filters to customize and extend the resources to push.![Screenshot](https://user-images.githubusercontent.com/617637/31279476-7c3dffd6-aaa9-11e7-91d8-57ec4435d067.png)
## Installation
Install the latest version with
```sh
composer require wearerequired/h2push
```The plugin requires at least PHP 7.4 and WordPress 5.6.
## Hooks reference
### `h2push.as_header`
By default the plugin will use the Link header if no headers are sent yet and falls back to the `` element. To change this behavior you can use the `h2push.as_header` filter. Example:
```php
// Force H2 Push to always use the `` element.
add_filter( 'h2push.as_header', '__return_false' );
```This filter is also useful if the server doesn't support HTTP/2 yet and you still want to benefit from preloading.
### `h2push.push_resources`
By default the plugin collects all enqueued scripts and styles which are have been registered before or at the `wp_enqueue_scripts` hook. The `h2push.push_resources` filters allows to customize the list of resources. Example:
```php
/**
* Add web font and hero image to the list of resources to push/preload.
*
* @param array $resources List of resources.
* @return array List of resources.
*/
function my_theme_push_resources( array $resources ): array {
$relative_template_directory_uri = wp_parse_url( get_template_directory_uri(), PHP_URL_PATH );// Push web font.
$resources[] = [
'href' => $relative_template_directory_uri . '/assets/fonts/fancy.woff2',
'as' => 'font',
'type' => 'font/woff2',
'crossorigin',
];if ( is_front_page() && ! is_paged() ) {
// Push hero image.
$resources[] = [
'href' => $relative_template_directory_uri . '/assets/images/hero.webp',
'as' => 'image',
'type' => 'image/webp',
];
}return $resources;
}
add_filter( 'h2push.push_resources', 'my_theme_push_resources' );
```### `h2push.is_allowed_push_host`
By default the plugin only sends push requests for local resources where the asset URL matches the home URL. To change this behavior you can use the `h2push.is_allowed_push_host` filter. Example:
```php
/**
* Allow resources from example.org to be pushed/preloaded too.
*
* @param bool $is_allowed Whether the host should be allowed. Default true for local resources.
* @param string $host The host name of the resource.
* @return bool Whether the host should be allowed.
*/
function my_theme_is_allowed_push_host( $is_allowed, $host ) {
return $is_allowed || 'example.org' === $host;
}
add_filter( 'h2push.is_allowed_push_host', 'my_theme_is_allowed_push_host' );
```