钩子文档

wp_script_attributes

💡 云策文档标注

概述

wp_script_attributes 是一个 WordPress 过滤器,用于修改脚本标签的属性。它允许开发者在输出脚本标签时动态添加或调整属性,如 async、defer 或自定义属性。

关键要点

  • 这是一个过滤器,用于处理脚本标签的属性数组
  • 参数 $attributes 是一个键值对数组,代表要添加到脚本标签的属性
  • 常用于优化脚本加载行为或添加自定义数据属性

📄 原文内容

Filters attributes to be added to a script tag.

Parameters

$attributesarray
Key-value pairs representing <script> tag attributes.
Only the attribute name is added to the <script> tag for entries with a boolean value, and that are true.

Source

$attributes = apply_filters( 'wp_script_attributes', $attributes );

Changelog

Version Description
5.7.0 Introduced.

User Contributed Notes

  1. Skip to note 2 content

    If you want to harden your website against supply chain attacks, you can use this filter to add Subresource integrity checking to a script.

    For example, for Select2 script at v4.0.9 from cdnjs.com, you would copy the SRI hash from https://cdnjs.com/libraries/select2/4.0.9, and add it as an attribute to the script.

    Then check for the select2-js ID, and that it is delivered by CDNJS, before adding the SRI attributes.

    /**
     * Add Subresource Integrity check to CDNJS Select2 script.
     *
     * @param  array $attr Attributes of each script.
     *
     * @return array $attr Attributes of each script.
     */
    function wpdocs_script_subresource_integrity( array $attr ): array {
    	if ( empty( $attr['id'] ) || empty( $attr['src'] ) ) {
    		return $attr;
    	}
    
    	if ( 'select2-js' === $attr['id'] && str_contains( $attr['src'], 'cdnjs.cloudflare.com' ) ) {
    		$attr['integrity']   = 'sha512-9p/L4acAjbjIaaGXmZf0Q2bV42HetlCLbv8EP0z3rLbQED2TAFUlDvAezy7kumYqg5T8jHtDdlm1fgIsr5QzKg==';
    		$attr['crossorigin'] = 'anonymous';
    	}
    
    	return $attr;
    }
    add_filter( 'wp_script_attributes', 'wpdocs_script_subresource_integrity', 10, 1 );

You must log in before being able to contribute a note or feedback.

{“prefetch”:[{“source”:”document”,”where”:{“and”:[{“href_matches”:”/*”},{“not”:{“href_matches”:[“/wp-*.php”,”/wp-admin/*”,”/files/*”,”/wp-content/*”,”/wp-content/plugins/*”,”/wp-content/themes/wporg-developer-2023/*”,”/wp-content/themes/wporg-parent-2021/*”,”/*\?(.+)”]}},{“not”:{“selector_matches”:”a[rel~=”nofollow”]”}},{“not”:{“selector_matches”:”.no-prefetch, .no-prefetch a”}}]},”eagerness”:”conservative”}]}

var prism_settings = {“pluginUrl”:”https://developer.wordpress.org/wp-content/plugins/code-syntax-block/”};
//# sourceURL=mkaz-code-syntax-prism-js-js-extra

var autocomplete = {“ajaxurl”:”https://developer.wordpress.org/wp-admin/admin-ajax.php”,”nonce”:”a22d1a9404″,”post_type”:”wp-parser-hook”};
//# sourceURL=autocomplete-js-extra

wp.i18n.setLocaleData( { ‘text directionu0004ltr’: [ ‘ltr’ ] } );
//# sourceURL=wp-i18n-js-after

var wporgFunctionReferenceI18n = {“copy”:”Copy”,”copied”:”Code copied”,”expand”:”Expand code”,”collapse”:”Collapse code”,”sourceFile”:”wp-includes/script-loader.php”};
//# sourceURL=wporg-developer-function-reference-js-extra

var quicktagsL10n = {“closeAllOpenTags”:”Close all open tags”,”closeTags”:”close tags”,”enterURL”:”Enter the URL”,”enterImageURL”:”Enter the URL of the image”,”enterImageDescription”:”Enter a description of the image”,”textdirection”:”text direction”,”toggleTextdirection”:”Toggle Editor Text Direction”,”dfw”:”Distraction-free writing mode”,”strong”:”Bold”,”strongClose”:”Close bold tag”,”em”:”Italic”,”emClose”:”Close italic tag”,”link”:”Insert link”,”blockquote”:”Blockquote”,”blockquoteClose”:”Close blockquote tag”,”del”:”Deleted text (strikethrough)”,”delClose”:”Close deleted text tag”,”ins”:”Inserted text”,”insClose”:”Close inserted text tag”,”image”:”Insert image”,”ul”:”Bulleted list”,”ulClose”:”Close bulleted list tag”,”ol”:”Numbered list”,”olClose”:”Close numbered list tag”,”li”:”List item”,”liClose”:”Close list item tag”,”code”:”Code”,”codeClose”:”Close code tag”,”more”:”Insert Read More tag”};
//# sourceURL=quicktags-js-extra

var wporg_note_feedback = {“show”:”Show feedback”,”hide”:”Hide feedback”,”hide_feedback”:”Hide feedback form”,”add_feedback”:”Add feedback”};
//# sourceURL=wporg-developer-user-notes-feedback-js-extra

var wporg_note_preview = {“ajaxurl”:”https://developer.wordpress.org/wp-admin/admin-ajax.php”,”nonce”:”de3c1c9510″,”preview”:”preview note”,”preview_empty”:”Nothing to preview”,”is_admin”:””};
//# sourceURL=wporg-developer-preview-js-extra

_stq = window._stq || [];
_stq.push([ “view”, {“v”:”ext”,”blog”:”209306761″,”post”:”135054″,”tz”:”0″,”srv”:”developer.wordpress.org”,”j”:”1:15.5″} ]);
_stq.push([ “clickTrackerInit”, “209306761”, “135054” ]);
//# sourceURL=jetpack-stats-js-before

var wporgGlobalHeaderI18n = {“openSearchLabel”:”Open Search”,”closeSearchLabel”:”Close Search”,”overflowMenuLabel”:”More menu”};
//# sourceURL=wporg-global-header-script-js-extra

{“baseUrl”:”https://s.w.org/images/core/emoji/17.0.2/72×72/”,”ext”:”.png”,”svgUrl”:”https://s.w.org/images/core/emoji/17.0.2/svg/”,”svgExt”:”.svg”,”source”:{“concatemoji”:”https://developer.wordpress.org/wp-includes/js/wp-emoji-release.min.js?ver=7.1-alpha-62239″}}

/*! This file is auto-generated */
const a=JSON.parse(document.getElementById(“wp-emoji-settings”).textContent),o=(window._wpemojiSettings=a,”wpEmojiSettingsSupports”),s=[“flag”,”emoji”];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const a=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===a[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e{s[e]=t(o,e,n,a)}),s}function r(e){var t=document.createElement(“script”);t.src=e,t.defer=!0,document.head.appendChild(t)}a.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if(“object”==typeof e&&”number”==typeof e.timestamp&&(new Date).valueOf(){i(n=e.data),r.terminate(),t(n)})}catch(e){}i(n=f(s,u,c,p))}t(n)}).then(e=>{for(const n in e)a.supports[n]=e[n],a.supports.everything=a.supports.everything&&a.supports[n],”flag”!==n&&(a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&a.supports[n]);var t;a.supports.everythingExceptFlag=a.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((t=a.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});
//# sourceURL=https://developer.wordpress.org/wp-includes/js/wp-emoji-loader.min.js