Update font awesome integration

This commit is contained in:
Tetrakern 2023-11-10 17:22:35 +01:00
parent fcdecf6f94
commit 6281ab64a0
6 changed files with 92 additions and 37 deletions

View File

@ -306,6 +306,7 @@ Fictioneer customizes WordPress by using as many standard action and filter hook
| `render_block` | `fictioneer_download_block_wrapper`
| `rest_authentication_errors` | `fictioneer_restrict_rest_api`
| `show_admin_bar` | `__return_false`
| `style_loader_tag` | `fictioneer_add_font_awesome_integrity`
| `the_content` | `fictioneer_embed_consent_wrappers`, `fictioneer_add_lightbox_to_post_images`, `fictioneer_add_chapter_paragraph_id`
| `the_password_form` | `fictioneer_password_form`
| `theme_templates` | `fictioneer_disallow_page_template_select`

View File

@ -31,6 +31,7 @@ This guide is mainly written for people who never had their own WordPress site b
* [Minimum/Maximum Values](#minimummaximum-values)
* [Menus](#menus)
* [Queries](#queries)
* [Font Awesome](#font-awesome)
* [Constants](#constants)
## Choosing a Host
@ -858,6 +859,14 @@ if ( FICTIONEER_ENABLE_STICKY_CARDS ) {
}
```
### Font Awesome
Fictioneer loads the free version of [Font Awesome 6.4.2](https://fontawesome.com/) by default and unless you want to use a different one or encounter compatibility issues (usually when a plugin includes FA as well), no action is required here.
* If you want to include it via plugin (perhaps a Pro Kit) or custom function, disable the theme version under **Fictioneer > General > Compatibility**.
* If you want to change the CDN link and integrity hash, do that by overwriting the `FICTIONEER_FA_CDN` and `FICTIONEER_FA_INTEGRITY` constants in a [child theme](https://developer.wordpress.org/themes/advanced-topics/child-themes/). You can set the integrity to `null` if not needed.
### Constants
Some options are not available in the settings because tempering with them can break the theme or result in unexpected behavior. Those options are defined via constants in the **function.php**. If you want to change them, you need a [child theme](https://developer.wordpress.org/themes/advanced-topics/child-themes/). Just override them in the child themes own **function.php**, but only if you know what you are doing!
@ -893,6 +902,8 @@ define( 'CONSTANT_NAME', value );
| FICTIONEER_CARD_PAGE_FOOTER_DATE | string | Page card footer date format. Default `"M j, 'y"`.
| FICTIONEER_CARD_ARTICLE_FOOTER_DATE | string | Article card footer date format. Default `"M j, 'y"`.
| FICTIONEER_STORY_FOOTER_B480_DATE | string | Story page footer date format (<= 480px). Default `"M j, 'y"`.
| FICTIONEER_FA_CDN | string | Font Awesome CDN URL.
| FICTIONEER_FA_INTEGRITY | string | Font Awesome integrity SHA384 hash.
| FICTIONEER_COMMENTCODE_TTL | integer | How long guests can see their private/unapproved comments in _seconds_. Default `600`.
| FICTIONEER_AJAX_TTL | integer | How long to cache certain AJAX requests locally in _milliseconds_. Default `60000`.
| FICTIONEER_AJAX_LOGIN_TTL | integer | How long to cache AJAX authentications locally in _milliseconds_. Default `15000`.

View File

@ -110,6 +110,19 @@ define(
'image/jpeg, image/png, image/webp, image/avif, image/gif, application/pdf, application/epub+zip, application/rtf, text/plain, image/svg+xml'
);
// String: Font Awesome CDN URL
if ( ! defined( 'FICTIONEER_FA_CDN' ) ) {
define( 'FICTIONEER_FA_CDN', 'https://use.fontawesome.com/releases/v6.4.2/css/all.css' );
}
// String: Font Awesome CDN integrity
if ( ! defined( 'FICTIONEER_FA_INTEGRITY' ) ) {
define(
'FICTIONEER_FA_INTEGRITY',
'sha384-blOohCVdhjmtROpu8+CfTnUWham9nkX7P7OZQMst+RUnhtoY/9qemFAkIKOYxDI3'
);
}
/*
* Date Strings
*/

View File

@ -432,59 +432,73 @@ function fictioneer_style_footer_queue() {
add_action( 'get_footer', 'fictioneer_style_footer_queue' );
// =============================================================================
// FONT AWESOME 6+
// FONT AWESOME
// =============================================================================
if ( ! function_exists( 'fa_custom_setup_cdn_webfont' ) ) {
if ( ! function_exists( 'fictioneer_add_font_awesome_integrity' ) ) {
/**
* Add Font Awesome 6+ to the site
* Enqueue Font Awesome
*
* @since 4.5
* @since 5.7.6
* @link https://fontawesome.com/docs/web/use-with/wordpress/install-manually
* @link https://fontawesome.com/account/cdn
*
* @param string $tag The link tag for the enqueued style.
* @param string $handle The style's registered handle.
*
* @return string The modified link tag.
*/
function fa_custom_setup_cdn_webfont( $cdn_url = '', $integrity = null ) {
$matches = [];
$match_result = preg_match( '|/([^/]+?)\.css$|', $cdn_url, $matches );
$resource_handle_uniqueness = ( $match_result === 1 ) ? $matches[1] : md5( $cdn_url );
$resource_handle = "font-awesome-cdn-webfont-$resource_handle_uniqueness";
function fictioneer_add_font_awesome_integrity( $tag, $handle ) {
// Abort conditions...
if ( empty( FICTIONEER_FA_INTEGRITY ) ) {
return $tag;
}
foreach ( ['wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts'] as $action ) {
// Modify HTML
if ( $handle === 'font-awesome-cdn-webfont-fictioneer' ) {
$tag = preg_replace( '/\/>$/', 'integrity="' . FICTIONEER_FA_INTEGRITY . '" crossorigin="anonymous" />', $tag, 1 );
}
// Continue filter
return $tag;
}
}
if ( ! function_exists( 'fictioneer_add_font_awesome' ) ) {
/**
* Enqueue Font Awesome
*
* @since 5.7.6
* @link https://fontawesome.com/docs/web/use-with/wordpress/install-manually
*/
function fictioneer_add_font_awesome() {
// Abort conditions...
if ( empty( FICTIONEER_FA_CDN ) ) {
return;
}
// Setup
$actions = ['wp_enqueue_scripts', 'admin_enqueue_scripts', 'login_enqueue_scripts'];
// Actions
foreach ( $actions as $action ) {
add_action(
$action,
function () use ( $cdn_url, $resource_handle ) {
wp_enqueue_style( $resource_handle, $cdn_url, [], null );
function () {
wp_enqueue_style( 'font-awesome-cdn-webfont-fictioneer', FICTIONEER_FA_CDN, [], null );
}
);
}
if ( $integrity ) {
add_filter(
'style_loader_tag',
function( $html, $handle ) use ( $resource_handle, $integrity ) {
if ( in_array( $handle, [$resource_handle], true ) ) {
return preg_replace(
'/\/>$/',
'integrity="' . $integrity .
'" crossorigin="anonymous" />',
$html,
1
);
} else {
return $html;
}
},
10,
2
);
}
// Filters
add_filter( 'style_loader_tag', 'fictioneer_add_font_awesome_integrity', 10, 2 );
}
fa_custom_setup_cdn_webfont(
'https://use.fontawesome.com/releases/v6.1.2/css/all.css',
'sha384-fZCoUih8XsaUZnNDOiLqnby1tMJ0sE7oBbNk2Xxf5x8Z4SvNQ9j83vFMa/erbVrV'
);
// Initialize
if ( ! get_option( 'fictioneer_disable_font_awesome' ) ) {
fictioneer_add_font_awesome();
}
}
// =============================================================================

View File

@ -635,6 +635,13 @@ define( 'FICTIONEER_OPTIONS', array(
'sanitize_callback' => 'fictioneer_sanitize_checkbox',
'label' => __( 'Show story changelog button', 'fictioneer' ),
'default' => false
),
'fictioneer_disable_font_awesome' => array(
'name' => 'fictioneer_disable_font_awesome',
'group' => 'fictioneer-settings-general-group',
'sanitize_callback' => 'fictioneer_sanitize_checkbox',
'label' => __( 'Disable Font Awesome integration', 'fictioneer' ),
'default' => false
)
),
'integers' => array(

View File

@ -825,6 +825,15 @@
?>
</div>
<div class="fictioneer-card__row">
<?php
fictioneer_label_checkbox(
'fictioneer_disable_font_awesome',
__( 'Only do this if you integrate it yourself.', 'fictioneer' )
);
?>
</div>
<div class="fictioneer-card__row">
<?php
fictioneer_label_checkbox(