Tribe__Assets::register( object $origin, string $slug, string $file, array $deps = array(), string|array|null $action = null, string|array $arguments = array() )
Register an Asset and attach a callback to the required action to display it correctly.
Contents
Parameters
- $origin
-
(object) (Required) The main object for the plugin you are enqueueing the asset for.
- $slug
-
(string) (Required) Slug to save the asset - passes through
sanitize_title_with_dashes(). - $file
-
(string) (Required) The asset file to load (CSS or JS), including non-minified file extension.
- $deps
-
(array) (Optional) The list of dependencies or callable function that will return a list of dependencies.
Default value: array()
- $action
-
(string|array|null) (Optional) The WordPress action(s) to enqueue on, such as
wp_enqueue_scripts,admin_enqueue_scripts, orlogin_enqueue_scripts.Default value: null
- $arguments
-
(string|array) (Optional) Array or string of parameters for this asset.
- 'action'
(array|string|null) The WordPress action(s) this asset will be enqueued on. - 'priority'
(int) Priority in which this asset will be loaded on the WordPress action. - 'file'
(string) The relative path to the File that will be enqueued, uses the $origin to get the full path. - 'type'
(string) Asset Type,jsorcss. - 'deps'
(array) An array of other asset as dependencies. - 'version'
(string) Version number, used for cache expiring. - 'media'
(string) Used only for CSS, when to load the file. - 'in_footer'
(bool) A boolean determining if the javascript should be loaded on the footer. - 'localize'
(array|object) Variables needed on the JavaScript side.- 'name'
(string) Name of the JS variable. - 'data'
(string|array) Contents of the JS variable.
- 'name'
- 'conditionals'
(callable[]) An callable method or an array of them, that will determine if the asset is loaded or not.
Default value: array()
- 'action'
Return
(object|false) The registered object or false on error.
Source
File: src/Tribe/Assets.php
public function register( $origin, $slug, $file, $deps = array(), $action = null, $arguments = array() ) {
// Prevent weird stuff here
$slug = sanitize_title_with_dashes( $slug );
if ( $this->exists( $slug ) ) {
return $this->get( $slug );
}
if ( is_string( $origin ) ) {
// Origin needs to be a class with a `instance` method and a Version constant
if ( class_exists( $origin ) && method_exists( $origin, 'instance' ) && defined( $origin . '::VERSION' ) ) {
$origin = call_user_func( array( $origin, 'instance' ) );
}
}
if ( is_object( $origin ) ) {
$origin_name = get_class( $origin );
if ( ! defined( $origin_name . '::VERSION' ) ) {
// If we have a Object and we don't have instance or version
return false;
}
} else {
return false;
}
// Fetches the version on the Origin Version constant
$version = constant( $origin_name . '::VERSION' );
// Default variables to prevent notices
$defaults = array(
'slug' => null,
'file' => false,
'url' => false,
'action' => null,
'priority' => 10,
'type' => null,
'deps' => array(),
'groups' => array(),
'version' => $version,
'media' => 'all',
'in_footer' => true,
'is_registered' => false,
'origin_path' => null,
'origin_url' => null,
'origin_name' => null,
// Bigger Variables at the end
'localize' => array(),
'conditionals' => array(),
);
// Merge Arguments
$asset = (object) wp_parse_args( $arguments, $defaults );
// Enforce these one
$asset->slug = $slug;
$asset->file = $file;
$asset->deps = $deps;
$asset->action = $action;
$asset->origin_path = trailingslashit( ! empty( $origin->plugin_path ) ? $origin->plugin_path : $origin->pluginPath );
$asset->origin_name = $origin_name;
// Origin URL might throw notices so we double check
$asset->origin_url = ! empty( $origin->plugin_url ) ? $origin->plugin_url : null;
$asset->origin_url = ! empty( $origin->pluginUrl ) ? $origin->pluginUrl : null;
if ( ! empty( $asset->origin_url ) ) {
$asset->origin_url = trailingslashit( $asset->origin_url );
}
// If we don't have a type on the arguments we grab from the File path
if ( is_null( $asset->type ) ) {
if ( substr( $asset->file, -3, 3 ) === '.js' ) {
$asset->type = 'js';
} elseif ( substr( $asset->file, -4, 4 ) === '.css' ) {
$asset->type = 'css';
}
}
// If asset type is wrong don't register
if ( ! in_array( $asset->type, array( 'js', 'css' ) ) ) {
return false;
}
/**
* Deprecated filter to allow changing version based on the type of Asset
*
* @todo remove on 4.6
* @deprecated 4.3
*
* @param string $version
*/
$asset->version = apply_filters( "tribe_events_{$asset->type}_version", $asset->version );
/**
* Filter to change version number on assets
*
* @param string $version
* @param object $asset
*/
$asset->version = apply_filters( 'tribe_asset_version', $asset->version, $asset );
// Clean these
$asset->priority = absint( $asset->priority );
$asset->in_footer = (bool) $asset->in_footer;
$asset->media = esc_attr( $asset->media );
// Ensures that we have a priority over 1
if ( $asset->priority < 1 ) {
$asset->priority = 1;
}
$is_vendor = strpos( $asset->file, 'vendor/' ) !== false ? true : false;
// Setup the actual URL
if ( filter_var( $asset->file, FILTER_VALIDATE_URL ) ) {
$asset->url = $asset->file;
} else {
$asset->url = $this->maybe_get_min_file( tribe_resource_url( $asset->file, false, ( $is_vendor ? '' : null ), $origin ) );
}
// If you are passing localize, you need `name` and `data`
if ( ! empty( $asset->localize ) && ( is_array( $asset->localize ) || is_object( $asset->localize ) ) ) {
if ( is_array( $asset->localize ) && empty( $asset->localize['name'] ) ) {
foreach ( $asset->localize as $index => $local ) {
$asset->localize[ $index ] = (object) $local;
}
} else {
$asset->localize = (object) $asset->localize;
// if we don't have both reset localize
if ( ! isset( $asset->localize->data, $asset->localize->name ) ) {
$asset->localize = array();
}
}
}
// Looks for a single conditional callable and places it in an Array
if ( ! empty( $asset->conditionals ) && is_callable( $asset->conditionals ) ) {
$asset->conditionals = array( $asset->conditionals );
}
// Groups is always an array of unique strings
if ( ! empty( $asset->groups ) ) {
$asset->groups = (array) $asset->groups;
$asset->groups = array_filter( $asset->groups, 'is_string' );
$asset->groups = array_unique( $asset->groups );
}
/**
* Filter an Asset loading variables
*
* @param object $asset
*/
$asset = apply_filters( 'tribe_asset_pre_register', $asset );
// Set the Asset on the array of notices
$this->assets[ $slug ] = $asset;
// Sorts by priority
uasort( $this->assets, array( $this, 'order_by_priority' ) );
// Return the Slug because it might be modified
return $asset;
}
Changelog
| Version | Description |
|---|---|
| 4.3 | Introduced. |