Tribe__Assets::enqueue( string|array $forcibly_enqueue = null )
Enqueues registered assets.
Contents
This method is called on whichever action (if any) was declared during registration.
It can also be called directly with a list of asset slugs to forcibly enqueue, which may be useful where an asset is required in a situation not anticipated when it was originally registered.
Parameters
- $forcibly_enqueue
-
(string|array) (Optional)
Default value: null
Source
File: src/Tribe/Assets.php
public function enqueue( $forcibly_enqueue = null ) {
$forcibly_enqueue = array_filter( (array) $forcibly_enqueue );
$assets = $this->get();
foreach ( $assets as $asset ) {
// Should this asset be enqueued regardless of the current filter/any conditional requirements?
$must_enqueue = in_array( $asset->slug, $forcibly_enqueue );
$in_filter = in_array( current_filter(), (array) $asset->action );
// Skip if we are not on the correct filter (unless we are forcibly enqueuing)
if ( ! $in_filter && ! $must_enqueue ) {
continue;
}
// If any single conditional returns true, then we need to enqueue the asset
if ( empty( $asset->action ) && ! $must_enqueue ) {
continue;
}
// If this asset was late called
if ( ! $asset->is_registered ) {
$this->register_in_wp( $asset );
}
// Default to enqueuing the asset if there are no conditionals,
// and default to not enqueuing it if there *are* conditionals
$enqueue = empty( $asset->conditionals );
if ( ! $enqueue ) {
// Reset Enqeue
$enqueue = array();
// Which is the operator?
$conditional_operator = Tribe__Utils__Array::get( $asset->conditionals, 'operator', 'OR' );
// If we have a set of conditionals we loop on then and get if they are true
foreach ( $asset->conditionals as $key => $conditional ) {
// Avoid doing anything to the operator
if ( 'operator' === $key ) {
continue;
}
$enqueue[] = call_user_func( $conditional );
}
// By default we use OR for backwards compatibility
if ( 'OR' === $conditional_operator ) {
$enqueue = in_array( true, $enqueue );
} else {
$enqueue = ! in_array( false, $enqueue );
}
}
/**
* Allows developers to hook-in and prevent an asset from been loaded
*
* @since 4.3
*
* @param bool $enqueue If we should enqueue or not a given asset
* @param object $asset Which asset we are dealing with
*/
$enqueue = apply_filters( 'tribe_asset_enqueue', $enqueue, $asset );
/**
* Allows developers to hook-in and prevent an asset from been loaded
*
* @since 4.3
*
* @param bool $enqueue If we should enqueue or not a given asset
* @param object $asset Which asset we are dealing with
*/
$enqueue = apply_filters( 'tribe_asset_enqueue_' . $asset->slug, $enqueue, $asset );
if ( ! $enqueue && ! $must_enqueue ) {
continue;
}
if ( 'js' === $asset->type ) {
wp_enqueue_script( $asset->slug );
// Only localize on JS and if we have data
if ( ! empty( $asset->localize ) ) {
// Makes sure we have an Array of Localize data
if ( is_object( $asset->localize ) ) {
$localization = array( $asset->localize );
} else {
$localization = (array) $asset->localize;
}
/**
* Check to ensure we haven't already localized it before
* @since 4.5.8
*/
foreach ( $localization as $localize ) {
if ( in_array( $localize->name, $this->localized ) ) {
continue;
}
// If we have a Callable as the Localize data we execute it
if ( is_callable( $localize->data ) ) {
$localize->data = call_user_func_array( $localize->data, array( $asset ) );
}
wp_localize_script( $asset->slug, $localize->name, $localize->data );
$this->localized[] = $localize->name;
}
}
} else {
wp_enqueue_style( $asset->slug );
}
$asset->already_enqueued = true;
}
}
Changelog
| Version | Description |
|---|---|
| 4.3 | Introduced. |