[ Index ] |
PHP Cross Reference of WordPress |
[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 * Initialize $wp_scripts if it has not been set. 13 * 14 * @global WP_Scripts $wp_scripts 15 * 16 * @since 4.2.0 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 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, $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, 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 * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. 81 * 82 * @since 2.1.0 83 * 84 * @param string|bool|array $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 * Register 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 * 161 * @param string $handle Name of the script. Should be unique. 162 * @param string|bool $src Full URL of the script, or path of the script relative to the WordPress root directory. 163 * If source is set to false, script is an alias of other scripts it depends on. 164 * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. 165 * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL 166 * as a query string for cache busting purposes. If version is set to false, a version 167 * number is automatically added equal to current installed WordPress version. 168 * If set to null, no version is added. 169 * @param bool $in_footer Optional. Whether to enqueue the script before `</body>` instead of in the `<head>`. 170 * Default 'false'. 171 * @return bool Whether the script has been registered. True on success, false on failure. 172 */ 173 function wp_register_script( $handle, $src, $deps = array(), $ver = false, $in_footer = false ) { 174 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 175 176 $wp_scripts = wp_scripts(); 177 178 $registered = $wp_scripts->add( $handle, $src, $deps, $ver ); 179 if ( $in_footer ) { 180 $wp_scripts->add_data( $handle, 'group', 1 ); 181 } 182 183 return $registered; 184 } 185 186 /** 187 * Localize a script. 188 * 189 * Works only if the script has already been registered. 190 * 191 * Accepts an associative array $l10n and creates a JavaScript object: 192 * 193 * "$object_name" = { 194 * key: value, 195 * key: value, 196 * ... 197 * } 198 * 199 * @see WP_Scripts::localize() 200 * @link https://core.trac.wordpress.org/ticket/11520 201 * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. 202 * 203 * @since 2.2.0 204 * 205 * @todo Documentation cleanup 206 * 207 * @param string $handle Script handle the data will be attached to. 208 * @param string $object_name Name for the JavaScript object. Passed directly, so it should be qualified JS variable. 209 * Example: '/[a-zA-Z0-9_]+/'. 210 * @param array $l10n The data itself. The data can be either a single or multi-dimensional array. 211 * @return bool True if the script was successfully localized, false otherwise. 212 */ 213 function wp_localize_script( $handle, $object_name, $l10n ) { 214 global $wp_scripts; 215 216 if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { 217 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 218 return false; 219 } 220 221 return $wp_scripts->localize( $handle, $object_name, $l10n ); 222 } 223 224 /** 225 * Sets translated strings for a script. 226 * 227 * Works only if the script has already been registered. 228 * 229 * @see WP_Scripts::set_translations() 230 * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts. 231 * 232 * @since 5.0.0 233 * @since 5.1.0 The `$domain` parameter was made optional. 234 * 235 * @param string $handle Script handle the textdomain will be attached to. 236 * @param string $domain Optional. Text domain. Default 'default'. 237 * @param string $path Optional. The full file path to the directory containing translation files. 238 * @return bool True if the text domain was successfully localized, false otherwise. 239 */ 240 function wp_set_script_translations( $handle, $domain = 'default', $path = null ) { 241 global $wp_scripts; 242 243 if ( ! ( $wp_scripts instanceof WP_Scripts ) ) { 244 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 245 return false; 246 } 247 248 return $wp_scripts->set_translations( $handle, $domain, $path ); 249 } 250 251 /** 252 * Remove a registered script. 253 * 254 * Note: there are intentional safeguards in place to prevent critical admin scripts, 255 * such as jQuery core, from being unregistered. 256 * 257 * @see WP_Dependencies::remove() 258 * 259 * @since 2.1.0 260 * 261 * @global string $pagenow The filename of the current screen. 262 * 263 * @param string $handle Name of the script to be removed. 264 */ 265 function wp_deregister_script( $handle ) { 266 global $pagenow; 267 268 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 269 270 /** 271 * Do not allow accidental or negligent de-registering of critical scripts in the admin. 272 * Show minimal remorse if the correct hook is used. 273 */ 274 $current_filter = current_filter(); 275 if ( ( is_admin() && 'admin_enqueue_scripts' !== $current_filter ) || 276 ( 'wp-login.php' === $pagenow && 'login_enqueue_scripts' !== $current_filter ) 277 ) { 278 $not_allowed = array( 279 'jquery', 280 'jquery-core', 281 'jquery-migrate', 282 'jquery-ui-core', 283 'jquery-ui-accordion', 284 'jquery-ui-autocomplete', 285 'jquery-ui-button', 286 'jquery-ui-datepicker', 287 'jquery-ui-dialog', 288 'jquery-ui-draggable', 289 'jquery-ui-droppable', 290 'jquery-ui-menu', 291 'jquery-ui-mouse', 292 'jquery-ui-position', 293 'jquery-ui-progressbar', 294 'jquery-ui-resizable', 295 'jquery-ui-selectable', 296 'jquery-ui-slider', 297 'jquery-ui-sortable', 298 'jquery-ui-spinner', 299 'jquery-ui-tabs', 300 'jquery-ui-tooltip', 301 'jquery-ui-widget', 302 'underscore', 303 'backbone', 304 ); 305 306 if ( in_array( $handle, $not_allowed, true ) ) { 307 _doing_it_wrong( 308 __FUNCTION__, 309 sprintf( 310 /* translators: 1: Script name, 2: wp_enqueue_scripts */ 311 __( 'Do not deregister the %1$s script in the administration area. To target the front-end theme, use the %2$s hook.' ), 312 "<code>$handle</code>", 313 '<code>wp_enqueue_scripts</code>' 314 ), 315 '3.6.0' 316 ); 317 return; 318 } 319 } 320 321 wp_scripts()->remove( $handle ); 322 } 323 324 /** 325 * Enqueue a script. 326 * 327 * Registers the script if $src provided (does NOT overwrite), and enqueues it. 328 * 329 * @see WP_Dependencies::add() 330 * @see WP_Dependencies::add_data() 331 * @see WP_Dependencies::enqueue() 332 * 333 * @since 2.1.0 334 * 335 * @param string $handle Name of the script. Should be unique. 336 * @param string $src Full URL of the script, or path of the script relative to the WordPress root directory. 337 * Default empty. 338 * @param string[] $deps Optional. An array of registered script handles this script depends on. Default empty array. 339 * @param string|bool|null $ver Optional. String specifying script version number, if it has one, which is added to the URL 340 * as a query string for cache busting purposes. If version is set to false, a version 341 * number is automatically added equal to current installed WordPress version. 342 * If set to null, no version is added. 343 * @param bool $in_footer Optional. Whether to enqueue the script before `</body>` instead of in the `<head>`. 344 * Default 'false'. 345 */ 346 function wp_enqueue_script( $handle, $src = '', $deps = array(), $ver = false, $in_footer = false ) { 347 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 348 349 $wp_scripts = wp_scripts(); 350 351 if ( $src || $in_footer ) { 352 $_handle = explode( '?', $handle ); 353 354 if ( $src ) { 355 $wp_scripts->add( $_handle[0], $src, $deps, $ver ); 356 } 357 358 if ( $in_footer ) { 359 $wp_scripts->add_data( $_handle[0], 'group', 1 ); 360 } 361 } 362 363 $wp_scripts->enqueue( $handle ); 364 } 365 366 /** 367 * Remove a previously enqueued script. 368 * 369 * @see WP_Dependencies::dequeue() 370 * 371 * @since 3.1.0 372 * 373 * @param string $handle Name of the script to be removed. 374 */ 375 function wp_dequeue_script( $handle ) { 376 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 377 378 wp_scripts()->dequeue( $handle ); 379 } 380 381 /** 382 * Determines whether a script has been added to the queue. 383 * 384 * For more information on this and similar theme functions, check out 385 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/ 386 * Conditional Tags} article in the Theme Developer Handbook. 387 * 388 * @since 2.8.0 389 * @since 3.5.0 'enqueued' added as an alias of the 'queue' list. 390 * 391 * @param string $handle Name of the script. 392 * @param string $list Optional. Status of the script to check. Default 'enqueued'. 393 * Accepts 'enqueued', 'registered', 'queue', 'to_do', and 'done'. 394 * @return bool Whether the script is queued. 395 */ 396 function wp_script_is( $handle, $list = 'enqueued' ) { 397 _wp_scripts_maybe_doing_it_wrong( __FUNCTION__, $handle ); 398 399 return (bool) wp_scripts()->query( $handle, $list ); 400 } 401 402 /** 403 * Add metadata to a script. 404 * 405 * Works only if the script has already been registered. 406 * 407 * Possible values for $key and $value: 408 * 'conditional' string Comments for IE 6, lte IE 7, etc. 409 * 410 * @since 4.2.0 411 * 412 * @see WP_Dependencies::add_data() 413 * 414 * @param string $handle Name of the script. 415 * @param string $key Name of data point for which we're storing a value. 416 * @param mixed $value String containing the data to be added. 417 * @return bool True on success, false on failure. 418 */ 419 function wp_script_add_data( $handle, $key, $value ) { 420 return wp_scripts()->add_data( $handle, $key, $value ); 421 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Nov 21 01:00:03 2024 | Cross-referenced by PHPXref 0.7.1 |