[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Dependencies API: Scripts functions 4 * 5 * @since 2.6.0 6 * 7 * @package WordPress 8 * @subpackage Dependencies 9 */ 10 11 /** 12 * Initializes $wp_scripts if it has not been set. 13 * 14 * @since 4.2.0 15 * 16 * @global WP_Scripts $wp_scripts 17 * 18 * @return WP_Scripts WP_Scripts instance. 19 */ 20 function wp_scripts() { 21 global $wp_scripts; 22 23 if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { 24 $wp_scripts = new WP_Scripts(); 25 } 26 27 return $wp_scripts; 28 } 29 30 /** 31 * Helper function to output a _doing_it_wrong message when applicable. 32 * 33 * @ignore 34 * @since 4.2.0 35 * @since 5.5.0 Added the `$handle` parameter. 36 * 37 * @param string $function_name Function name. 38 * @param string $handle Optional. Name of the script or stylesheet that was 39 * registered or enqueued too early. Default empty. 40 */ 41 function _wp_scripts_maybe_doing_it_wrong( $function_name, $handle = '' ) { 42 if ( did_action( 'init' ) || did_action( 'wp_enqueue_scripts' ) 43 || did_action( 'admin_enqueue_scripts' ) || did_action( 'login_enqueue_scripts' ) 44 ) { 45 return; 46 } 47 48 $message = sprintf( 49 /* translators: 1: wp_enqueue_scripts, 2: admin_enqueue_scripts, 3: login_enqueue_scripts */ 50 __( 'Scripts and styles should not be registered or enqueued until the %1$s, %2$s, or %3$s hooks.' ), 51 '<code>wp_enqueue_scripts</code>', 52 '<code>admin_enqueue_scripts</code>', 53 '<code>login_enqueue_scripts</code>' 54 ); 55 56 if ( $handle ) { 57 $message .= ' ' . sprintf( 58 /* translators: %s: Name of the script or stylesheet. */ 59 __( 'This notice was triggered by the %s handle.' ), 60 '<code>' . $handle . '</code>' 61 ); 62 } 63 64 _doing_it_wrong( 65 $function_name, 66 $message, 67 '3.3.0' 68 ); 69 } 70 71 /** 72 * Prints scripts in document head that are in the $handles queue. 73 * 74 * Called by admin-header.php and {@see 'wp_head'} hook. Since it is called by wp_head on every page load, 75 * the function does not instantiate the WP_Scripts object unless script names are explicitly passed. 76 * Makes use of already-instantiated `$wp_scripts` global if present. Use provided {@see 'wp_print_scripts'} 77 * hook to register/enqueue new scripts. 78 * 79 * @see WP_Scripts::do_item() 80 * @since 2.1.0 81 * 82 * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. 83 * 84 * @param string|string[]|false $handles Optional. Scripts to be printed. Default 'false'. 85 * @return string[] On success, an array of handles of processed WP_Dependencies items; otherwise, an empty array. 86 */ 87 function wp_print_scripts( $handles = false ) { 88 global $wp_scripts; 89 90 /** 91 * Fires before scripts in the $handles queue are printed. 92 * 93 * @since 2.1.0 94 */ 95 do_action( 'wp_print_scripts' ); 96 97 if ( '' === $handles ) { // For 'wp_head'. 98 $handles = false; 99 } 100 101 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__ ); 102 103 if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { 104 if ( ! $handles ) { 105 return array(); // No need to instantiate if nothing is there. 106 } 107 } 108 109 return wp_scripts()->do_items( $handles ); 110 } 111 112 /** 113 * Adds extra code to a registered script. 114 * 115 * Code will only be added if the script is already in the queue. 116 * Accepts a string `$data` containing the code. If two or more code blocks 117 * are added to the same script `$handle`, they will be printed in the order 118 * they were added, i.e. the latter added code can redeclare the previous. 119 * 120 * @since 4.5.0 121 * 122 * @see WP_Scripts::add_inline_script() 123 * 124 * @param string $handle Name of the script to add the inline script to. 125 * @param string $data String containing the JavaScript to be added. 126 * @param string $position Optional. Whether to add the inline script before the handle 127 * or after. Default 'after'. 128 * @return bool True on success, false on failure. 129 */ 130 function wp_add_inline_script( $handle, $data, $position = 'after' ) { 131 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 132 133 if ( false !== stripos( $data, '</script>' ) ) { 134 _doing_it_wrong( 135 __FUNCTION__, 136 sprintf( 137 /* translators: 1: <script>, 2: wp_add_inline_script() */ 138 __( 'Do not pass %1$s tags to %2$s.' ), 139 '<code><script></code>', 140 '<code>wp_add_inline_script()</code>' 141 ), 142 '4.5.0' 143 ); 144 $data = trim( preg_replace( '#<script[^>]*>(.*)</script>#is', '$1', $data ) ); 145 } 146 147 return wp_scripts()->add_inline_script( $handle, $data, $position ); 148 } 149 150 /** 151 * Registers a new script. 152 * 153 * Registers a script to be enqueued later using the wp_enqueue_script() function. 154 * 155 * @see WP_Dependencies::add() 156 * @see WP_Dependencies::add_data() 157 * 158 * @since 2.1.0 159 * @since 4.3.0 A return value was added. 160 * @since 6.3.0 The $in_footer parameter of type boolean was overloaded to be an $args parameter of type array. 161 * @since 6.9.0 The $fetchpriority parameter of type string was added to the $args parameter of type array. 162 * 163 * @param string $handle Name of the script. Should be unique. 164 * @param string|false $src Full URL of the script, or path of the script relative to the WordPress root directory. 165 * If source is set to false, script is an alias of other scripts it depends on. 166 * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. 167 * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL 168 * as a query string for cache busting purposes. If version is set to false, a version 169 * number is automatically added equal to current installed WordPress version. 170 * If set to null, no version is added. 171 * @param array|bool $args { 172 * Optional. An array of additional script loading strategies. Default empty array. 173 * Otherwise, it may be a boolean in which case it determines whether the script is printed in the footer. Default false. 174 * 175 * @type string $strategy Optional. If provided, may be either 'defer' or 'async'. 176 * @type bool $in_footer Optional. Whether to print the script in the footer. Default 'false'. 177 * @type string $fetchpriority Optional. The fetch priority for the script. Default 'auto'. 178 * } 179 * @return bool Whether the script has been registered. True on success, false on failure. 180 */ 181 function wp_register_script( $handle, $src, $deps = array(), $ver = false, $args = array() ) { 182 if ( ! is_array( $args ) ) { 183 $args = array( 184 'in_footer' => (bool) $args, 185 ); 186 } 187 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 188 189 $wp_scripts = wp_scripts(); 190 191 $registered = $wp_scripts->add( $handle, $src, $deps, $ver ); 192 if ( ! empty( $args['in_footer'] ) ) { 193 $wp_scripts->add_data( $handle, 'group', 1 ); 194 } 195 if ( ! empty( $args['strategy'] ) ) { 196 $wp_scripts->add_data( $handle, 'strategy', $args['strategy'] ); 197 } 198 if ( ! empty( $args['fetchpriority'] ) ) { 199 $wp_scripts->add_data( $handle, 'fetchpriority', $args['fetchpriority'] ); 200 } 201 return $registered; 202 } 203 204 /** 205 * Localizes a script. 206 * 207 * Works only if the script has already been registered. 208 * 209 * Accepts an associative array `$l10n` and creates a JavaScript object: 210 * 211 * "$object_name": { 212 * key: value, 213 * key: value, 214 * ... 215 * } 216 * 217 * @see WP_Scripts::localize() 218 * @link https://core.trac.wordpress.org/ticket/11520 219 * 220 * @since 2.2.0 221 * 222 * @todo Documentation cleanup 223 * 224 * @param string $handle Script handle the data will be attached to. 225 * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable. 226 * Example: '/[a-zA-Z0-9_]+/'. 227 * @param array $l10n The data itself. The data can be either a single or multi-dimensional array. 228 * @return bool True if the script was successfully localized, false otherwise. 229 */ 230 function wp_localize_script( $handle, $object_name, $l10n ) { 231 $wp_scripts = wp_scripts(); 232 233 return $wp_scripts->localize( $handle, $object_name, $l10n ); 234 } 235 236 /** 237 * Sets translated strings for a script. 238 * 239 * Works only if the script has already been registered. 240 * 241 * @see WP_Scripts::set_translations() 242 * @since 5.0.0 243 * @since 5.1.0 The `$domain` parameter was made optional. 244 * 245 * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. 246 * 247 * @param string $handle Script handle the textdomain will be attached to. 248 * @param string $domain Optional. Text domain. Default 'default'. 249 * @param string $path Optional. The full file path to the directory containing translation files. 250 * @return bool True if the text domain was successfully localized, false otherwise. 251 */ 252 function wp_set_script_translations( $handle, $domain = 'default', $path = '' ) { 253 global $wp_scripts; 254 255 if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { 256 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 257 return false; 258 } 259 260 return $wp_scripts->set_translations( $handle, $domain, $path ); 261 } 262 263 /** 264 * Removes a registered script. 265 * 266 * Note: there are intentional safeguards in place to prevent critical admin scripts, 267 * such as jQuery core, from being unregistered. 268 * 269 * @see WP_Dependencies::remove() 270 * 271 * @since 2.1.0 272 * 273 * @global string $pagenow The filename of the current screen. 274 * 275 * @param string $handle Name of the script to be removed. 276 */ 277 function wp_deregister_script( $handle ) { 278 global $pagenow; 279 280 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 281 282 /** 283 * Do not allow accidental or negligent de-registering of critical scripts in the admin. 284 * Show minimal remorse if the correct hook is used. 285 */ 286 $current_filter = current_filter(); 287 if ( ( is_admin() && 'admin_enqueue_scripts' !== $current_filter ) || 288 ( 'wp-login.php' === $pagenow && 'login_enqueue_scripts' !== $current_filter ) 289 ) { 290 $not_allowed = array( 291 'jquery', 292 'jquery-core', 293 'jquery-migrate', 294 'jquery-ui-core', 295 'jquery-ui-accordion', 296 'jquery-ui-autocomplete', 297 'jquery-ui-button', 298 'jquery-ui-datepicker', 299 'jquery-ui-dialog', 300 'jquery-ui-draggable', 301 'jquery-ui-droppable', 302 'jquery-ui-menu', 303 'jquery-ui-mouse', 304 'jquery-ui-position', 305 'jquery-ui-progressbar', 306 'jquery-ui-resizable', 307 'jquery-ui-selectable', 308 'jquery-ui-slider', 309 'jquery-ui-sortable', 310 'jquery-ui-spinner', 311 'jquery-ui-tabs', 312 'jquery-ui-tooltip', 313 'jquery-ui-widget', 314 'underscore', 315 'backbone', 316 ); 317 318 if ( in_array( $handle, $not_allowed, true ) ) { 319 _doing_it_wrong( 320 __FUNCTION__, 321 sprintf( 322 /* translators: 1: Script name, 2: wp_enqueue_scripts */ 323 __( 'Do not deregister the %1$s script in the administration area. To target the front-end theme, use the %2$s hook.' ), 324 "<code>$handle</code>", 325 '<code>wp_enqueue_scripts</code>' 326 ), 327 '3.6.0' 328 ); 329 return; 330 } 331 } 332 333 wp_scripts()->remove( $handle ); 334 } 335 336 /** 337 * Enqueues a script. 338 * 339 * Registers the script if `$src` provided (does NOT overwrite), and enqueues it. 340 * 341 * @see WP_Dependencies::add() 342 * @see WP_Dependencies::add_data() 343 * @see WP_Dependencies::enqueue() 344 * 345 * @since 2.1.0 346 * @since 6.3.0 The $in_footer parameter of type boolean was overloaded to be an $args parameter of type array. 347 * @since 6.9.0 The $fetchpriority parameter of type string was added to the $args parameter of type array. 348 * 349 * @param string $handle Name of the script. Should be unique. 350 * @param string $src Full URL of the script, or path of the script relative to the WordPress root directory. 351 * Default empty. 352 * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. 353 * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL 354 * as a query string for cache busting purposes. If version is set to false, a version 355 * number is automatically added equal to current installed WordPress version. 356 * If set to null, no version is added. 357 * @param array|bool $args { 358 * Optional. An array of additional script loading strategies. Default empty array. 359 * Otherwise, it may be a boolean in which case it determines whether the script is printed in the footer. Default false. 360 * 361 * @type string $strategy Optional. If provided, may be either 'defer' or 'async'. 362 * @type bool $in_footer Optional. Whether to print the script in the footer. Default 'false'. 363 * @type string $fetchpriority Optional. The fetch priority for the script. Default 'auto'. 364 * } 365 */ 366 function wp_enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $args = array() ) { 367 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 368 369 $wp_scripts = wp_scripts(); 370 371 if ( $src || ! empty( $args ) ) { 372 $_handle = explode( '?', $handle ); 373 if ( ! is_array( $args ) ) { 374 $args = array( 375 'in_footer' => (bool) $args, 376 ); 377 } 378 379 if ( $src ) { 380 $wp_scripts->add( $_handle[0], $src, $deps, $ver ); 381 } 382 if ( ! empty( $args['in_footer'] ) ) { 383 $wp_scripts->add_data( $_handle[0], 'group', 1 ); 384 } 385 if ( ! empty( $args['strategy'] ) ) { 386 $wp_scripts->add_data( $_handle[0], 'strategy', $args['strategy'] ); 387 } 388 if ( ! empty( $args['fetchpriority'] ) ) { 389 $wp_scripts->add_data( $_handle[0], 'fetchpriority', $args['fetchpriority'] ); 390 } 391 } 392 393 $wp_scripts->enqueue( $handle ); 394 } 395 396 /** 397 * Removes a previously enqueued script. 398 * 399 * @see WP_Dependencies::dequeue() 400 * 401 * @since 3.1.0 402 * 403 * @param string $handle Name of the script to be removed. 404 */ 405 function wp_dequeue_script( $handle ) { 406 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 407 408 wp_scripts()->dequeue( $handle ); 409 } 410 411 /** 412 * Determines whether a script has been added to the queue. 413 * 414 * For more information on this and similar theme functions, check out 415 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ 416 * Conditional Tags} article in the Theme Developer Handbook. 417 * 418 * @since 2.8.0 419 * @since 3.5.0 'enqueued' added as an alias of the 'queue' list. 420 * 421 * @param string $handle Name of the script. 422 * @param string $status Optional. Status of the script to check. Default 'enqueued'. 423 * Accepts 'enqueued', 'registered', 'queue', 'to_do', and 'done'. 424 * @return bool Whether the script is queued. 425 */ 426 function wp_script_is( $handle, $status = 'enqueued' ) { 427 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 428 429 return (bool) wp_scripts()->query( $handle, $status ); 430 } 431 432 /** 433 * Adds metadata to a script. 434 * 435 * Works only if the script has already been registered. 436 * 437 * Possible values for $key and $value: 438 * 'conditional' string Comments for IE 6, lte IE 7, etc. 439 * 440 * @since 4.2.0 441 * 442 * @see WP_Dependencies::add_data() 443 * 444 * @param string $handle Name of the script. 445 * @param string $key Name of data point for which we're storing a value. 446 * @param mixed $value String containing the data to be added. 447 * @return bool True on success, false on failure. 448 */ 449 function wp_script_add_data( $handle, $key, $value ) { 450 return wp_scripts()->add_data( $handle, $key, $value ); 451 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Tue Sep 9 08:20:04 2025 | Cross-referenced by PHPXref |