summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/js/_enqueues/admin/user-profile.js14
-rw-r--r--src/js/_enqueues/vendor/README.md2
-rw-r--r--src/js/_enqueues/vendor/swfobject.js4
-rw-r--r--src/js/_enqueues/vendor/swfupload/handlers.js54
-rw-r--r--src/js/_enqueues/vendor/swfupload/handlers.min.js1
-rw-r--r--src/js/_enqueues/vendor/swfupload/license.txt32
-rw-r--r--src/js/_enqueues/vendor/swfupload/swfupload.js140
-rw-r--r--src/js/media/views/uploader/status.js6
-rw-r--r--src/readme.html2
-rw-r--r--src/wp-admin/async-upload.php19
-rw-r--r--src/wp-admin/css/common.css4
-rw-r--r--src/wp-admin/css/list-tables.css8
-rw-r--r--src/wp-admin/css/revisions.css30
-rw-r--r--src/wp-admin/edit-comments.php2
-rw-r--r--src/wp-admin/includes/ajax-actions.php8
-rw-r--r--src/wp-admin/includes/class-custom-image-header.php2
-rw-r--r--src/wp-admin/includes/class-language-pack-upgrader.php2
-rw-r--r--src/wp-admin/includes/class-wp-automatic-updater.php2
-rw-r--r--src/wp-admin/includes/class-wp-community-events.php8
-rw-r--r--src/wp-admin/includes/class-wp-debug-data.php23
-rw-r--r--src/wp-admin/includes/class-wp-filesystem-ftpext.php9
-rw-r--r--src/wp-admin/includes/class-wp-filesystem-ftpsockets.php4
-rw-r--r--src/wp-admin/includes/class-wp-list-table.php4
-rw-r--r--src/wp-admin/includes/class-wp-ms-sites-list-table.php18
-rw-r--r--src/wp-admin/includes/class-wp-site-health.php2
-rw-r--r--src/wp-admin/includes/file.php2
-rw-r--r--src/wp-admin/includes/media.php2
-rw-r--r--src/wp-admin/includes/misc.php8
-rw-r--r--src/wp-admin/includes/post.php2
-rw-r--r--src/wp-admin/includes/revision.php72
-rw-r--r--src/wp-admin/includes/taxonomy.php2
-rw-r--r--src/wp-admin/includes/template.php3
-rw-r--r--src/wp-admin/includes/update-core.php1
-rw-r--r--src/wp-admin/includes/upgrade.php2
-rw-r--r--src/wp-admin/install.php4
-rw-r--r--src/wp-admin/menu.php2
-rw-r--r--src/wp-admin/nav-menus.php2
-rw-r--r--src/wp-admin/network/site-info.php2
-rw-r--r--src/wp-admin/network/site-new.php2
-rw-r--r--src/wp-admin/network/sites.php44
-rw-r--r--src/wp-admin/options-discussion.php2
-rw-r--r--src/wp-admin/options.php17
-rw-r--r--src/wp-admin/post.php2
-rw-r--r--src/wp-admin/upgrade.php4
-rw-r--r--src/wp-admin/user-edit.php30
-rw-r--r--src/wp-content/themes/twentyeleven/inc/block-patterns.php4
-rw-r--r--src/wp-content/themes/twentyfourteen/css/blocks.css2
-rw-r--r--src/wp-content/themes/twentyfourteen/inc/block-patterns.php2
-rw-r--r--src/wp-content/themes/twentynineteen/inc/block-patterns.php16
-rw-r--r--src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss6
-rw-r--r--src/wp-content/themes/twentynineteen/style-rtl.css6
-rw-r--r--src/wp-content/themes/twentynineteen/style.css6
-rw-r--r--src/wp-content/themes/twentyseventeen/inc/block-patterns.php60
-rw-r--r--src/wp-content/themes/twentysixteen/css/editor-blocks.css4
-rw-r--r--src/wp-content/themes/twentythirteen/inc/block-patterns.php4
-rw-r--r--src/wp-content/themes/twentytwelve/css/editor-blocks.css8
-rw-r--r--src/wp-content/themes/twentytwenty/assets/js/index.js5
-rw-r--r--src/wp-content/themes/twentytwenty/functions.php6
-rw-r--r--src/wp-content/themes/twentytwentyone/assets/js/primary-navigation.js2
-rw-r--r--src/wp-includes/author-template.php2
-rw-r--r--src/wp-includes/block-template-utils.php9
-rw-r--r--src/wp-includes/block-template.php2
-rw-r--r--src/wp-includes/blocks.php34
-rw-r--r--src/wp-includes/capabilities.php89
-rw-r--r--src/wp-includes/category-template.php26
-rw-r--r--src/wp-includes/certificates/ca-bundle.crt168
-rw-r--r--src/wp-includes/certificates/cacert.pem168
-rw-r--r--src/wp-includes/class-wp-block-list.php3
-rw-r--r--src/wp-includes/class-wp-block-pattern-categories-registry.php2
-rw-r--r--src/wp-includes/class-wp-block-patterns-registry.php2
-rw-r--r--src/wp-includes/class-wp-block-styles-registry.php2
-rw-r--r--src/wp-includes/class-wp-block.php2
-rw-r--r--src/wp-includes/class-wp-classic-to-block-menu-converter.php1
-rw-r--r--src/wp-includes/class-wp-comment-query.php4
-rw-r--r--src/wp-includes/class-wp-customize-widgets.php8
-rw-r--r--src/wp-includes/class-wp-image-editor-imagick.php53
-rw-r--r--src/wp-includes/class-wp-locale-switcher.php2
-rw-r--r--src/wp-includes/class-wp-navigation-fallback.php1
-rw-r--r--src/wp-includes/class-wp-oembed.php16
-rw-r--r--src/wp-includes/class-wp-phpmailer.php12
-rw-r--r--src/wp-includes/class-wp-roles.php36
-rw-r--r--src/wp-includes/class-wp-site.php2
-rw-r--r--src/wp-includes/class-wp-tax-query.php2
-rw-r--r--src/wp-includes/class-wp-xmlrpc-server.php2
-rw-r--r--src/wp-includes/class-wpdb.php42
-rw-r--r--src/wp-includes/comment-template.php29
-rw-r--r--src/wp-includes/comment.php49
-rw-r--r--src/wp-includes/compat.php10
-rw-r--r--src/wp-includes/css/wp-embed-template.css17
-rw-r--r--src/wp-includes/embed.php18
-rw-r--r--src/wp-includes/formatting.php21
-rw-r--r--src/wp-includes/general-template.php3
-rw-r--r--src/wp-includes/kses.php28
-rw-r--r--src/wp-includes/link-template.php31
-rw-r--r--src/wp-includes/load.php9
-rw-r--r--src/wp-includes/media-template.php4
-rw-r--r--src/wp-includes/media.php21
-rw-r--r--src/wp-includes/meta.php188
-rw-r--r--src/wp-includes/ms-load.php8
-rw-r--r--src/wp-includes/ms-site.php12
-rw-r--r--src/wp-includes/option.php20
-rw-r--r--src/wp-includes/pluggable.php20
-rw-r--r--src/wp-includes/plugin.php4
-rw-r--r--src/wp-includes/post.php52
-rw-r--r--src/wp-includes/rest-api/class-wp-rest-response.php4
-rw-r--r--src/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php11
-rw-r--r--src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php8
-rw-r--r--src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php21
-rw-r--r--src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php14
-rw-r--r--src/wp-includes/script-loader.php12
-rw-r--r--src/wp-includes/taxonomy.php22
-rw-r--r--src/wp-includes/theme.json10
-rw-r--r--src/wp-includes/theme.php2
-rw-r--r--src/wp-includes/user.php19
-rw-r--r--src/wp-includes/version.php4
-rw-r--r--src/wp-includes/widgets/class-wp-widget-media-gallery.php1
-rw-r--r--src/wp-login.php2
-rw-r--r--src/wp-settings.php6
118 files changed, 963 insertions, 1143 deletions
diff --git a/src/js/_enqueues/admin/user-profile.js b/src/js/_enqueues/admin/user-profile.js
index 2aebe62a91..ce680ef4c4 100644
--- a/src/js/_enqueues/admin/user-profile.js
+++ b/src/js/_enqueues/admin/user-profile.js
@@ -56,8 +56,8 @@
// Once zxcvbn loads, passwords strength is known.
$( '#pw-weak-text-label' ).text( __( 'Confirm use of weak password' ) );
- // Focus the password field.
- if ( 'mailserver_pass' !== $pass1.prop('id' ) ) {
+ // Focus the password field if not the install screen.
+ if ( 'mailserver_pass' !== $pass1.prop('id' ) && ! $('#weblog_title').length ) {
$( $pass1 ).trigger( 'focus' );
}
}
@@ -101,6 +101,8 @@
return;
}
$toggleButton = $pass1Row.find('.wp-hide-pw');
+
+ // Toggle between showing and hiding the password.
$toggleButton.show().on( 'click', function () {
if ( 'password' === $pass1.attr( 'type' ) ) {
$pass1.attr( 'type', 'text' );
@@ -110,6 +112,14 @@
resetToggle( true );
}
});
+
+ // Ensure the password input type is set to password when the form is submitted.
+ $pass1Row.closest( 'form' ).on( 'submit', function() {
+ if ( $pass1.attr( 'type' ) === 'text' ) {
+ $pass1.attr( 'type', 'password' );
+ resetToggle( true );
+ }
+ } );
}
/**
diff --git a/src/js/_enqueues/vendor/README.md b/src/js/_enqueues/vendor/README.md
index 4764f0b808..fef43e3ec2 100644
--- a/src/js/_enqueues/vendor/README.md
+++ b/src/js/_enqueues/vendor/README.md
@@ -10,7 +10,6 @@ In this directory you'll find vendor JavaScript packages that cannot be installe
- jcrop: https://github.com/tapmodo/Jcrop
- mediaelement: https://github.com/mediaelement/mediaelement
- plupload: https://github.com/moxiecode/plupload
-- swfupload: https://github.com/WordPress/secure-swfupload
- thickbox: https://codylindley.com/thickbox/
- tinymce: https://www.tiny.cloud/get-tiny/self-hosted/
- Download "TinyMCE Dev Package". This package is needed because it includes
@@ -70,6 +69,5 @@ In this directory you'll find vendor JavaScript packages that cannot be installe
- jquery/jquery.serializeobject: https://github.com/cowboy/jquery-misc/blob/master/jquery.ba-serializeobject.js
- jquery/jquery.table-hotkeys: WP version can be downloaded at https://code.google.com/archive/p/js-hotkeys/downloads?page=2. A newer version is available at https://github.com/jeresig/jquery.hotkeys.
- jquery/jquery.ui.touch-punch.js https://github.com/furf/jquery-ui-touch-punch/blob/master/jquery.ui.touch-punch.js
-- swfobject: https://github.com/swfobject/swfobject
- tw-sack: https://github.com/abritinthebay/simpleajaxcodekit
- zxcvbn: https://github.com/dropbox/zxcvbn cannot automatically be installed as the frequency lists need to be manually ROT13 transformed.
diff --git a/src/js/_enqueues/vendor/swfobject.js b/src/js/_enqueues/vendor/swfobject.js
index 87e61553b3..e69de29bb2 100644
--- a/src/js/_enqueues/vendor/swfobject.js
+++ b/src/js/_enqueues/vendor/swfobject.js
@@ -1,4 +0,0 @@
-/* SWFObject v2.2 <http://code.google.com/p/swfobject/>
- is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
-*/
-var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+encodeURI(O.location).toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}(); \ No newline at end of file
diff --git a/src/js/_enqueues/vendor/swfupload/handlers.js b/src/js/_enqueues/vendor/swfupload/handlers.js
index 2de11ab6d9..e69de29bb2 100644
--- a/src/js/_enqueues/vendor/swfupload/handlers.js
+++ b/src/js/_enqueues/vendor/swfupload/handlers.js
@@ -1,54 +0,0 @@
-var topWin = window.dialogArguments || opener || parent || top;
-
-function fileDialogStart() {}
-function fileQueued() {}
-function uploadStart() {}
-function uploadProgress() {}
-function prepareMediaItem() {}
-function prepareMediaItemInit() {}
-function itemAjaxError() {}
-function deleteSuccess() {}
-function deleteError() {}
-function updateMediaForm() {}
-function uploadSuccess() {}
-function uploadComplete() {}
-function wpQueueError() {}
-function wpFileError() {}
-function fileQueueError() {}
-function fileDialogComplete() {}
-function uploadError() {}
-function cancelUpload() {}
-
-function switchUploader() {
- jQuery( '#' + swfu.customSettings.swfupload_element_id ).hide();
- jQuery( '#' + swfu.customSettings.degraded_element_id ).show();
- jQuery( '.upload-html-bypass' ).hide();
-}
-
-function swfuploadPreLoad() {
- switchUploader();
-}
-
-function swfuploadLoadFailed() {
- switchUploader();
-}
-
-jQuery(document).ready(function($){
- $( 'input[type="radio"]', '#media-items' ).on( 'click', function(){
- var tr = $(this).closest('tr');
-
- if ( $(tr).hasClass('align') )
- setUserSetting('align', $(this).val());
- else if ( $(tr).hasClass('image-size') )
- setUserSetting('imgsize', $(this).val());
- });
-
- $( 'button.button', '#media-items' ).on( 'click', function(){
- var c = this.className || '';
- c = c.match(/url([^ '"]+)/);
- if ( c && c[1] ) {
- setUserSetting('urlbutton', c[1]);
- $(this).siblings('.urlfield').val( $(this).attr('title') );
- }
- });
-});
diff --git a/src/js/_enqueues/vendor/swfupload/handlers.min.js b/src/js/_enqueues/vendor/swfupload/handlers.min.js
index 09bbaf9c3d..e69de29bb2 100644
--- a/src/js/_enqueues/vendor/swfupload/handlers.min.js
+++ b/src/js/_enqueues/vendor/swfupload/handlers.min.js
@@ -1 +0,0 @@
-function fileDialogStart(){}function fileQueued(){}function uploadStart(){}function uploadProgress(){}function prepareMediaItem(){}function prepareMediaItemInit(){}function itemAjaxError(){}function deleteSuccess(){}function deleteError(){}function updateMediaForm(){}function uploadSuccess(){}function uploadComplete(){}function wpQueueError(){}function wpFileError(){}function fileQueueError(){}function fileDialogComplete(){}function uploadError(){}function cancelUpload(){}function switchUploader(){jQuery("#"+swfu.customSettings.swfupload_element_id).hide(),jQuery("#"+swfu.customSettings.degraded_element_id).show(),jQuery(".upload-html-bypass").hide()}function swfuploadPreLoad(){switchUploader()}function swfuploadLoadFailed(){switchUploader()}var topWin=window.dialogArguments||opener||parent||top;jQuery(document).ready(function(a){a('input[type="radio"]',"#media-items").on("click",function(){var b=a(this).closest("tr");a(b).hasClass("align")?setUserSetting("align",a(this).val()):a(b).hasClass("image-size")&&setUserSetting("imgsize",a(this).val())}),a("button.button","#media-items").on("click",function(){var b=this.className||"";b=b.match(/url([^ '"]+)/),b&&b[1]&&(setUserSetting("urlbutton",b[1]),a(this).siblings(".urlfield").val(a(this).attr("title")))})}); \ No newline at end of file
diff --git a/src/js/_enqueues/vendor/swfupload/license.txt b/src/js/_enqueues/vendor/swfupload/license.txt
index 8252ca9e24..e69de29bb2 100644
--- a/src/js/_enqueues/vendor/swfupload/license.txt
+++ b/src/js/_enqueues/vendor/swfupload/license.txt
@@ -1,32 +0,0 @@
-/**
- * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
- *
- * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/, http://www.vinterwebb.se/
- *
- * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
- * http://www.opensource.org/licenses/mit-license.php
- *
- */
-
-The MIT License
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE. \ No newline at end of file
diff --git a/src/js/_enqueues/vendor/swfupload/swfupload.js b/src/js/_enqueues/vendor/swfupload/swfupload.js
index 14d58dcaf5..e69de29bb2 100644
--- a/src/js/_enqueues/vendor/swfupload/swfupload.js
+++ b/src/js/_enqueues/vendor/swfupload/swfupload.js
@@ -1,140 +0,0 @@
-/**
- * SWFUpload fallback
- *
- * @since 4.9.0
- */
-
-var SWFUpload;
-
-( function () {
- function noop() {}
-
- if (SWFUpload == undefined) {
- SWFUpload = function (settings) {
- this.initSWFUpload(settings);
- };
- }
-
- SWFUpload.prototype.initSWFUpload = function ( settings ) {
- function fallback() {
- var $ = window.jQuery;
- var $placeholder = settings.button_placeholder_id ? $( '#' + settings.button_placeholder_id ) : $( settings.button_placeholder );
-
- if ( ! $placeholder.length ) {
- return;
- }
-
- var $form = $placeholder.closest( 'form' );
-
- if ( ! $form.length ) {
- $form = $( '<form enctype="multipart/form-data" method="post">' );
- $form.attr( 'action', settings.upload_url );
- $form.insertAfter( $placeholder ).append( $placeholder );
- }
-
- $placeholder.replaceWith(
- $( '<div>' )
- .append(
- $( '<input type="file" multiple />' ).attr({
- name: settings.file_post_name || 'async-upload',
- accepts: settings.file_types || '*.*'
- })
- ).append(
- $( '<input type="submit" name="html-upload" class="button" value="Upload" />' )
- )
- );
- }
-
- try {
- // Try the built-in fallback.
- if ( typeof settings.swfupload_load_failed_handler === 'function' && settings.custom_settings ) {
-
- window.swfu = {
- customSettings: settings.custom_settings
- };
-
- settings.swfupload_load_failed_handler();
- } else {
- fallback();
- }
- } catch ( ex ) {
- fallback();
- }
- };
-
- SWFUpload.instances = {};
- SWFUpload.movieCount = 0;
- SWFUpload.version = "0";
- SWFUpload.QUEUE_ERROR = {};
- SWFUpload.UPLOAD_ERROR = {};
- SWFUpload.FILE_STATUS = {};
- SWFUpload.BUTTON_ACTION = {};
- SWFUpload.CURSOR = {};
- SWFUpload.WINDOW_MODE = {};
-
- SWFUpload.completeURL = noop;
- SWFUpload.prototype.initSettings = noop;
- SWFUpload.prototype.loadFlash = noop;
- SWFUpload.prototype.getFlashHTML = noop;
- SWFUpload.prototype.getFlashVars = noop;
- SWFUpload.prototype.getMovieElement = noop;
- SWFUpload.prototype.buildParamString = noop;
- SWFUpload.prototype.destroy = noop;
- SWFUpload.prototype.displayDebugInfo = noop;
- SWFUpload.prototype.addSetting = noop;
- SWFUpload.prototype.getSetting = noop;
- SWFUpload.prototype.callFlash = noop;
- SWFUpload.prototype.selectFile = noop;
- SWFUpload.prototype.selectFiles = noop;
- SWFUpload.prototype.startUpload = noop;
- SWFUpload.prototype.cancelUpload = noop;
- SWFUpload.prototype.stopUpload = noop;
- SWFUpload.prototype.getStats = noop;
- SWFUpload.prototype.setStats = noop;
- SWFUpload.prototype.getFile = noop;
- SWFUpload.prototype.addFileParam = noop;
- SWFUpload.prototype.removeFileParam = noop;
- SWFUpload.prototype.setUploadURL = noop;
- SWFUpload.prototype.setPostParams = noop;
- SWFUpload.prototype.addPostParam = noop;
- SWFUpload.prototype.removePostParam = noop;
- SWFUpload.prototype.setFileTypes = noop;
- SWFUpload.prototype.setFileSizeLimit = noop;
- SWFUpload.prototype.setFileUploadLimit = noop;
- SWFUpload.prototype.setFileQueueLimit = noop;
- SWFUpload.prototype.setFilePostName = noop;
- SWFUpload.prototype.setUseQueryString = noop;
- SWFUpload.prototype.setRequeueOnError = noop;
- SWFUpload.prototype.setHTTPSuccess = noop;
- SWFUpload.prototype.setAssumeSuccessTimeout = noop;
- SWFUpload.prototype.setDebugEnabled = noop;
- SWFUpload.prototype.setButtonImageURL = noop;
- SWFUpload.prototype.setButtonDimensions = noop;
- SWFUpload.prototype.setButtonText = noop;
- SWFUpload.prototype.setButtonTextPadding = noop;
- SWFUpload.prototype.setButtonTextStyle = noop;
- SWFUpload.prototype.setButtonDisabled = noop;
- SWFUpload.prototype.setButtonAction = noop;
- SWFUpload.prototype.setButtonCursor = noop;
- SWFUpload.prototype.queueEvent = noop;
- SWFUpload.prototype.executeNextEvent = noop;
- SWFUpload.prototype.unescapeFilePostParams = noop;
- SWFUpload.prototype.testExternalInterface = noop;
- SWFUpload.prototype.flashReady = noop;
- SWFUpload.prototype.cleanUp = noop;
- SWFUpload.prototype.fileDialogStart = noop;
- SWFUpload.prototype.fileQueued = noop;
- SWFUpload.prototype.fileQueueError = noop;
- SWFUpload.prototype.fileDialogComplete = noop;
- SWFUpload.prototype.uploadStart = noop;
- SWFUpload.prototype.returnUploadStart = noop;
- SWFUpload.prototype.uploadProgress = noop;
- SWFUpload.prototype.uploadError = noop;
- SWFUpload.prototype.uploadSuccess = noop;
- SWFUpload.prototype.uploadComplete = noop;
- SWFUpload.prototype.debug = noop;
- SWFUpload.prototype.debugMessage = noop;
- SWFUpload.Console = {
- writeLine: noop
- };
-}() );
diff --git a/src/js/media/views/uploader/status.js b/src/js/media/views/uploader/status.js
index 86c538b833..f629e0a343 100644
--- a/src/js/media/views/uploader/status.js
+++ b/src/js/media/views/uploader/status.js
@@ -124,8 +124,11 @@ UploaderStatus = View.extend(/** @lends wp.media.view.UploaderStatus.prototype *
this.views.add( '.upload-errors', statusError, { at: 0 } );
_.delay( function() {
buttonClose.trigger( 'focus' );
- wp.a11y.speak( error.get( 'message' ), 'assertive' );
}, 1000 );
+
+ _.delay( function() {
+ wp.a11y.speak( error.get( 'message' ) );
+ }, 1500 );
},
dismiss: function() {
@@ -135,6 +138,7 @@ UploaderStatus = View.extend(/** @lends wp.media.view.UploaderStatus.prototype *
_.invoke( errors, 'remove' );
}
wp.Uploader.errors.reset();
+ wp.a11y.speak( wp.i18n.__( 'Error dismissed.' ) );
// Move focus to the modal after the dismiss button gets removed from the DOM.
if ( this.controller.modal ) {
this.controller.modal.focusManager.focus();
diff --git a/src/readme.html b/src/readme.html
index b40b60ff4b..b70648eaec 100644
--- a/src/readme.html
+++ b/src/readme.html
@@ -59,7 +59,7 @@
<h3>Recommendations</h3>
<ul>
<li><a href="https://www.php.net/">PHP</a> version <strong>7.4</strong> or greater.</li>
- <li><a href="https://www.mysql.com/">MySQL</a> version <strong>8.0</strong> or greater OR <a href="https://mariadb.org/">MariaDB</a> version <strong>10.5</strong> or greater.</li>
+ <li><a href="https://www.mysql.com/">MySQL</a> version <strong>8.0</strong> or greater OR <a href="https://mariadb.org/">MariaDB</a> version <strong>10.6</strong> or greater.</li>
<li>The <a href="https://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a> Apache module.</li>
<li><a href="https://wordpress.org/news/2016/12/moving-toward-ssl/">HTTPS</a> support.</li>
<li>A link to <a href="https://wordpress.org/">wordpress.org</a> on your site.</li>
diff --git a/src/wp-admin/async-upload.php b/src/wp-admin/async-upload.php
index 2ac2f20e76..135568507c 100644
--- a/src/wp-admin/async-upload.php
+++ b/src/wp-admin/async-upload.php
@@ -112,12 +112,14 @@ if ( isset( $_REQUEST['post_id'] ) ) {
$id = media_handle_upload( 'async-upload', $post_id );
if ( is_wp_error( $id ) ) {
- $button_unique_id = uniqid( 'dismiss-' );
- $message = sprintf(
+ $button_unique_id = uniqid( 'dismiss-' );
+ $error_description_id = uniqid( 'error-description-' );
+ $message = sprintf(
'%s <strong>%s</strong><br />%s',
sprintf(
- '<button type="button" id="%s" class="dismiss button-link">%s</button>',
+ '<button type="button" id="%1$s" class="dismiss button-link" aria-describedby="%2$s">%3$s</button>',
esc_attr( $button_unique_id ),
+ esc_attr( $error_description_id ),
__( 'Dismiss' )
),
sprintf(
@@ -127,14 +129,23 @@ if ( is_wp_error( $id ) ) {
),
esc_html( $id->get_error_message() )
);
+
wp_admin_notice(
$message,
array(
+ 'id' => $error_description_id,
'additional_classes' => array( 'error-div', 'error' ),
'paragraph_wrap' => false,
)
);
- echo "<script>jQuery( 'button#{$button_unique_id}' ).on( 'click', function() {jQuery(this).parents('div.media-item').slideUp(200, function(){jQuery(this).remove();})});</script>\n";
+
+ $speak_message = sprintf(
+ /* translators: %s: Name of the file that failed to upload. */
+ __( '%s has failed to upload.' ),
+ esc_js( $_FILES['async-upload']['name'] )
+ );
+
+ echo "<script>_.delay(function() {wp.a11y.speak('" . esc_js( $speak_message ) . "');}, 1500);jQuery( 'button#{$button_unique_id}' ).on( 'click', function() {jQuery(this).parents('div.media-item').slideUp(200, function(){jQuery(this).remove();wp.a11y.speak( wp.i18n.__( 'Error dismissed.' ) );jQuery( '#plupload-browse-button' ).trigger( 'focus' );})});</script>\n";
exit;
}
diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css
index c008d784ce..f8764e2b2d 100644
--- a/src/wp-admin/css/common.css
+++ b/src/wp-admin/css/common.css
@@ -3912,6 +3912,10 @@ img {
top: 7px;
}
+ .screen-reader-shortcut[href="#wp-toolbar"] {
+ display: none;
+ }
+
body {
min-width: 240px;
overflow-x: hidden;
diff --git a/src/wp-admin/css/list-tables.css b/src/wp-admin/css/list-tables.css
index da4bb599be..bc38d64b38 100644
--- a/src/wp-admin/css/list-tables.css
+++ b/src/wp-admin/css/list-tables.css
@@ -2064,7 +2064,6 @@ div.action-links,
}
.row-actions {
- margin-left: -8px;
margin-right: -8px;
padding-top: 4px;
}
@@ -2077,10 +2076,15 @@ div.action-links,
color: transparent;
}
+ .row-actions span {
+ font-size: 0;
+ }
+
.row-actions span a,
.row-actions span .button-link {
display: inline-block;
- padding: 4px 8px;
+ padding: 4px 16px 4px 0;
+ font-size: 13px;
line-height: 1.5;
}
diff --git a/src/wp-admin/css/revisions.css b/src/wp-admin/css/revisions.css
index 9d3a0b3a91..e16143cf48 100644
--- a/src/wp-admin/css/revisions.css
+++ b/src/wp-admin/css/revisions.css
@@ -572,6 +572,28 @@ div.revisions-controls > .wp-slider > .ui-slider-handle {
}
}
+@media screen and (max-width: 600px) {
+ .revisions-meta .author-card:not(.comparing-two-revisions .author-card) {
+ display: flex;
+ flex-direction: column;
+ width: fit-content;
+ gap: 16px;
+ }
+
+ .comparing-two-revisions .revisions-meta .restore-revision {
+ margin-top: 16px;
+ }
+
+ .revisions-controls {
+ padding-top: 0;
+ }
+
+ .revision-toggle-compare-mode {
+ position: relative;
+ padding: 1rem 0;
+ }
+}
+
@media screen and (max-width: 782px) {
#diff-next-revision,
#diff-previous-revision {
@@ -585,14 +607,18 @@ div.revisions-controls > .wp-slider > .ui-slider-handle {
.revisions-controls,
.comparing-two-revisions .revisions-controls {
- height: 170px;
+ height: fit-content;
}
.revisions-tooltip {
- bottom: 130px;
+ bottom: 155px;
z-index: 2;
}
+ .comparing-two-revisions .revisions-tooltip {
+ bottom: 200px;
+ }
+
.diff-meta {
overflow: hidden;
}
diff --git a/src/wp-admin/edit-comments.php b/src/wp-admin/edit-comments.php
index 262e2d9c35..8a004b5226 100644
--- a/src/wp-admin/edit-comments.php
+++ b/src/wp-admin/edit-comments.php
@@ -439,7 +439,7 @@ if ( isset( $_REQUEST['approved'] )
<input type="hidden" name="p" value="<?php echo esc_attr( (int) $post_id ); ?>" />
<?php endif; ?>
<input type="hidden" name="comment_status" value="<?php echo esc_attr( $comment_status ); ?>" />
-<input type="hidden" name="pagegen_timestamp" value="<?php echo esc_attr( current_time( 'mysql', 1 ) ); ?>" />
+<input type="hidden" name="pagegen_timestamp" value="<?php echo esc_attr( current_time( 'mysql', true ) ); ?>" />
<input type="hidden" name="_total" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg( 'total_items' ) ); ?>" />
<input type="hidden" name="_per_page" value="<?php echo esc_attr( $wp_list_table->get_pagination_arg( 'per_page' ) ); ?>" />
diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php
index 83b682634b..53635479e0 100644
--- a/src/wp-admin/includes/ajax-actions.php
+++ b/src/wp-admin/includes/ajax-actions.php
@@ -5354,7 +5354,7 @@ function wp_ajax_health_check_dotorg_communication() {
_doing_it_wrong(
'wp_ajax_health_check_dotorg_communication',
sprintf(
- // translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it.
+ /* translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it. */
__( 'The Site Health check for %1$s has been replaced with %2$s.' ),
'wp_ajax_health_check_dotorg_communication',
'WP_REST_Site_Health_Controller::test_dotorg_communication'
@@ -5387,7 +5387,7 @@ function wp_ajax_health_check_background_updates() {
_doing_it_wrong(
'wp_ajax_health_check_background_updates',
sprintf(
- // translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it.
+ /* translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it. */
__( 'The Site Health check for %1$s has been replaced with %2$s.' ),
'wp_ajax_health_check_background_updates',
'WP_REST_Site_Health_Controller::test_background_updates'
@@ -5420,7 +5420,7 @@ function wp_ajax_health_check_loopback_requests() {
_doing_it_wrong(
'wp_ajax_health_check_loopback_requests',
sprintf(
- // translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it.
+ /* translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it. */
__( 'The Site Health check for %1$s has been replaced with %2$s.' ),
'wp_ajax_health_check_loopback_requests',
'WP_REST_Site_Health_Controller::test_loopback_requests'
@@ -5470,7 +5470,7 @@ function wp_ajax_health_check_get_sizes() {
_doing_it_wrong(
'wp_ajax_health_check_get_sizes',
sprintf(
- // translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it.
+ /* translators: 1: The Site Health action that is no longer used by core. 2: The new function that replaces it. */
__( 'The Site Health check for %1$s has been replaced with %2$s.' ),
'wp_ajax_health_check_get_sizes',
'WP_REST_Site_Health_Controller::get_directory_sizes'
diff --git a/src/wp-admin/includes/class-custom-image-header.php b/src/wp-admin/includes/class-custom-image-header.php
index 54be1d90e4..3716b55909 100644
--- a/src/wp-admin/includes/class-custom-image-header.php
+++ b/src/wp-admin/includes/class-custom-image-header.php
@@ -951,7 +951,7 @@ endif;
<p class="submit">
<?php submit_button( __( 'Crop and Publish' ), 'primary', 'submit', false ); ?>
<?php
- if ( isset( $oitar ) && 1 === $oitar
+ if ( 1 === $oitar
&& ( current_theme_supports( 'custom-header', 'flex-height' )
|| current_theme_supports( 'custom-header', 'flex-width' ) )
) {
diff --git a/src/wp-admin/includes/class-language-pack-upgrader.php b/src/wp-admin/includes/class-language-pack-upgrader.php
index 6f7cf742bd..89b9f9ac87 100644
--- a/src/wp-admin/includes/class-language-pack-upgrader.php
+++ b/src/wp-admin/includes/class-language-pack-upgrader.php
@@ -383,7 +383,7 @@ class Language_Pack_Upgrader extends WP_Upgrader {
case 'theme':
$theme = wp_get_theme( $update->slug );
if ( $theme->exists() ) {
- return $theme->Get( 'Name' );
+ return $theme->get( 'Name' );
}
break;
case 'plugin':
diff --git a/src/wp-admin/includes/class-wp-automatic-updater.php b/src/wp-admin/includes/class-wp-automatic-updater.php
index 4dccd94ccd..2facbeb1d5 100644
--- a/src/wp-admin/includes/class-wp-automatic-updater.php
+++ b/src/wp-admin/includes/class-wp-automatic-updater.php
@@ -411,7 +411,7 @@ class WP_Automatic_Updater {
case 'theme':
$upgrader_item = $item->theme;
$theme = wp_get_theme( $upgrader_item );
- $item_name = $theme->Get( 'Name' );
+ $item_name = $theme->get( 'Name' );
// Add the current version so that it can be reported in the notification email.
$item->current_version = $theme->get( 'Version' );
if ( empty( $item->current_version ) ) {
diff --git a/src/wp-admin/includes/class-wp-community-events.php b/src/wp-admin/includes/class-wp-community-events.php
index 008611af21..b5a65e298d 100644
--- a/src/wp-admin/includes/class-wp-community-events.php
+++ b/src/wp-admin/includes/class-wp-community-events.php
@@ -375,17 +375,13 @@ class WP_Community_Events {
* of the user who triggered the cache refresh, rather than their own.
*
* @since 4.8.0
- * @deprecated 5.6.0 No longer used in core.
+ * @deprecated 5.5.2 No longer used in core.
*
* @param array $response_body The response which contains the events.
* @return array The response with dates and times formatted.
*/
protected function format_event_data_time( $response_body ) {
- _deprecated_function(
- __METHOD__,
- '5.5.2',
- 'This is no longer used by core, and only kept for backward compatibility.'
- );
+ _deprecated_function( __METHOD__, '5.5.2' );
if ( isset( $response_body['events'] ) ) {
foreach ( $response_body['events'] as $key => $event ) {
diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php
index cbb57a4b8c..cd04297684 100644
--- a/src/wp-admin/includes/class-wp-debug-data.php
+++ b/src/wp-admin/includes/class-wp-debug-data.php
@@ -682,6 +682,25 @@ class WP_Debug_Data {
);
}
+ // Get the image format transforms.
+ $mappings = wp_get_image_editor_output_format( '', '' );
+ $formatted_mappings = array();
+
+ if ( ! empty( $mappings ) ) {
+ foreach ( $mappings as $format => $mime_type ) {
+ $formatted_mappings[] = sprintf( '%s &rarr; %s', $format, $mime_type );
+ }
+ $mappings_display = implode( ', ', $formatted_mappings );
+ } else {
+ $mappings_display = __( 'No format transforms defined' );
+ }
+
+ $fields['image_format_transforms'] = array(
+ 'label' => __( 'Image format transforms' ),
+ 'value' => $mappings_display,
+ 'debug' => ( empty( $mappings ) ) ? 'No format transforms defined' : $mappings_display,
+ );
+
// Get GD information, if available.
if ( function_exists( 'gd_info' ) ) {
$gd = gd_info();
@@ -1860,10 +1879,14 @@ class WP_Debug_Data {
* Intended to supplement the array returned by `WP_Debug_Data::debug_data()`.
*
* @since 5.2.0
+ * @deprecated 5.6.0 Use WP_REST_Site_Health_Controller::get_directory_sizes()
+ * @see WP_REST_Site_Health_Controller::get_directory_sizes()
*
* @return array The sizes of the directories, also the database size and total installation size.
*/
public static function get_sizes() {
+ _deprecated_function( __METHOD__, '5.6.0', 'WP_REST_Site_Health_Controller::get_directory_sizes()' );
+
$size_db = self::get_database_size();
$upload_dir = wp_get_upload_dir();
diff --git a/src/wp-admin/includes/class-wp-filesystem-ftpext.php b/src/wp-admin/includes/class-wp-filesystem-ftpext.php
index 0294720ccd..7c721734c3 100644
--- a/src/wp-admin/includes/class-wp-filesystem-ftpext.php
+++ b/src/wp-admin/includes/class-wp-filesystem-ftpext.php
@@ -601,9 +601,11 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
}
/**
- * @param string $line
- * @return array {
- * Array of file information.
+ * Parses an individual entry from the FTP LIST command output.
+ *
+ * @param string $line A line from the directory listing.
+ * @return array|string {
+ * Array of file information. Empty string if the line could not be parsed.
*
* @type string $name Name of the file or directory.
* @type string $perms *nix representation of permissions.
@@ -658,7 +660,6 @@ class WP_Filesystem_FTPext extends WP_Filesystem_Base {
$lucifer = preg_split( '/[ ]/', $line, 9, PREG_SPLIT_NO_EMPTY );
if ( $lucifer ) {
- // echo $line."\n";
$lcount = count( $lucifer );
if ( $lcount < 8 ) {
diff --git a/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php b/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php
index 9a37d88c11..986fccf2cf 100644
--- a/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php
+++ b/src/wp-admin/includes/class-wp-filesystem-ftpsockets.php
@@ -77,7 +77,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
return false;
}
- $this->ftp->setTimeout( FS_CONNECT_TIMEOUT );
+ $this->ftp->SetTimeout( FS_CONNECT_TIMEOUT );
if ( ! $this->ftp->SetServer( $this->options['hostname'], $this->options['port'] ) ) {
$this->errors->add(
@@ -120,7 +120,7 @@ class WP_Filesystem_ftpsockets extends WP_Filesystem_Base {
$this->ftp->SetType( FTP_BINARY );
$this->ftp->Passive( true );
- $this->ftp->setTimeout( FS_TIMEOUT );
+ $this->ftp->SetTimeout( FS_TIMEOUT );
return true;
}
diff --git a/src/wp-admin/includes/class-wp-list-table.php b/src/wp-admin/includes/class-wp-list-table.php
index 5a7fa0db8e..cdf31db597 100644
--- a/src/wp-admin/includes/class-wp-list-table.php
+++ b/src/wp-admin/includes/class-wp-list-table.php
@@ -72,10 +72,10 @@ class WP_List_Table {
protected $modes = array();
/**
- * Stores the value returned by ->get_column_info().
+ * Stores the value returned by ::get_column_info().
*
* @since 4.1.0
- * @var array
+ * @var array|null
*/
protected $_column_headers;
diff --git a/src/wp-admin/includes/class-wp-ms-sites-list-table.php b/src/wp-admin/includes/class-wp-ms-sites-list-table.php
index 01968869a1..6097f5e13e 100644
--- a/src/wp-admin/includes/class-wp-ms-sites-list-table.php
+++ b/src/wp-admin/includes/class-wp-ms-sites-list-table.php
@@ -37,7 +37,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
$this->status_list = array(
'archived' => array( 'site-archived', __( 'Archived' ) ),
'spam' => array( 'site-spammed', _x( 'Spam', 'site' ) ),
- 'deleted' => array( 'site-deleted', __( 'Deleted' ) ),
+ 'deleted' => array( 'site-deleted', __( 'Flagged for Deletion' ) ),
'mature' => array( 'site-mature', __( 'Mature' ) ),
);
@@ -256,8 +256,8 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
/* translators: %s: Number of sites. */
'deleted' => _n_noop(
- 'Deleted <span class="count">(%s)</span>',
- 'Deleted <span class="count">(%s)</span>'
+ 'Flagged for Deletion <span class="count">(%s)</span>',
+ 'Flagged for Deletion <span class="count">(%s)</span>'
),
);
@@ -667,7 +667,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
* @since 5.3.0
*
* @param string[] $site_states An array of site states. Default 'Main',
- * 'Archived', 'Mature', 'Spam', 'Deleted'.
+ * 'Archived', 'Mature', 'Spam', 'Flagged for Deletion'.
* @param WP_Site $site The current site object.
*/
$site_states = apply_filters( 'display_site_states', $site_states, $_site );
@@ -758,7 +758,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
'activateblog_' . $blog['blog_id']
)
),
- _x( 'Activate', 'site' )
+ _x( 'Remove Deletion Flag', 'site' )
);
} else {
$actions['deactivate'] = sprintf(
@@ -769,7 +769,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
'deactivateblog_' . $blog['blog_id']
)
),
- __( 'Deactivate' )
+ __( 'Flag for Deletion' )
);
}
@@ -830,7 +830,7 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
'deleteblog_' . $blog['blog_id']
)
),
- __( 'Delete' )
+ __( 'Delete Permanently' )
);
}
}
@@ -844,9 +844,9 @@ class WP_MS_Sites_List_Table extends WP_List_Table {
/**
* Filters the action links displayed for each site in the Sites list table.
*
- * The 'Edit', 'Dashboard', 'Delete', and 'Visit' links are displayed by
+ * The 'Edit', 'Dashboard', 'Delete Permanently', and 'Visit' links are displayed by
* default for each site. The site's status determines whether to show the
- * 'Activate' or 'Deactivate' link, 'Unarchive' or 'Archive' links, and
+ * 'Remove Deletion Flag' or 'Flag for Deletion' link, 'Unarchive' or 'Archive' links, and
* 'Not Spam' or 'Spam' link for each site.
*
* @since 3.1.0
diff --git a/src/wp-admin/includes/class-wp-site-health.php b/src/wp-admin/includes/class-wp-site-health.php
index afcbfcb6f9..b7847d5e31 100644
--- a/src/wp-admin/includes/class-wp-site-health.php
+++ b/src/wp-admin/includes/class-wp-site-health.php
@@ -18,7 +18,7 @@ class WP_Site_Health {
private $mysql_server_version = '';
private $mysql_required_version = '5.5';
private $mysql_recommended_version = '8.0';
- private $mariadb_recommended_version = '10.5';
+ private $mariadb_recommended_version = '10.6';
public $php_memory_limit;
diff --git a/src/wp-admin/includes/file.php b/src/wp-admin/includes/file.php
index 40059273ba..0658662126 100644
--- a/src/wp-admin/includes/file.php
+++ b/src/wp-admin/includes/file.php
@@ -2622,7 +2622,7 @@ function request_filesystem_credentials( $form_post, $type = '', $error = false,
<?php
if ( isset( $types['ssh'] ) ) {
$hidden_class = '';
- if ( 'ssh' !== $connection_type || empty( $connection_type ) ) {
+ if ( 'ssh' !== $connection_type ) {
$hidden_class = ' class="hidden"';
}
?>
diff --git a/src/wp-admin/includes/media.php b/src/wp-admin/includes/media.php
index 5c0b5d0b38..7d9fd638fb 100644
--- a/src/wp-admin/includes/media.php
+++ b/src/wp-admin/includes/media.php
@@ -3337,7 +3337,7 @@ function attachment_submitbox_metadata() {
$uploaded_by_link = get_edit_user_link( $author->ID );
}
?>
- <div class="misc-pub-section misc-pub-uploadedby">
+ <div class="misc-pub-section misc-pub-uploadedby word-wrap-break-word">
<?php if ( $uploaded_by_link ) { ?>
<?php _e( 'Uploaded by:' ); ?> <a href="<?php echo $uploaded_by_link; ?>"><strong><?php echo $uploaded_by_name; ?></strong></a>
<?php } else { ?>
diff --git a/src/wp-admin/includes/misc.php b/src/wp-admin/includes/misc.php
index 979d237448..f42c247fb2 100644
--- a/src/wp-admin/includes/misc.php
+++ b/src/wp-admin/includes/misc.php
@@ -263,7 +263,7 @@ function save_mod_rewrite_rules() {
global $wp_rewrite;
if ( is_multisite() ) {
- return;
+ return null;
}
// Ensure get_home_path() is declared.
@@ -303,7 +303,7 @@ function iis7_save_url_rewrite_rules() {
global $wp_rewrite;
if ( is_multisite() ) {
- return;
+ return null;
}
// Ensure get_home_path() is declared.
@@ -988,7 +988,7 @@ function saveDomDocument( $doc, $filename ) { // phpcs:ignore WordPress.NamingCo
}
/**
- * Displays the default admin color scheme picker (Used in user-edit.php).
+ * Displays the default administration color scheme picker (Used in user-edit.php).
*
* @since 3.0.0
*
@@ -1025,7 +1025,7 @@ function admin_color_scheme_picker( $user_id ) {
<legend class="screen-reader-text"><span>
<?php
/* translators: Hidden accessibility text. */
- _e( 'Admin Color Scheme' );
+ _e( 'Administration Color Scheme' );
?>
</span></legend>
<?php
diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php
index 40fac43d6e..ebdd61df34 100644
--- a/src/wp-admin/includes/post.php
+++ b/src/wp-admin/includes/post.php
@@ -2186,7 +2186,7 @@ function wp_autosave( $post_data ) {
*
* @param int $post_id Optional. Post ID.
*/
-function redirect_post( $post_id = '' ) {
+function redirect_post( $post_id = 0 ) {
if ( isset( $_POST['save'] ) || isset( $_POST['publish'] ) ) {
$status = get_post_status( $post_id );
diff --git a/src/wp-admin/includes/revision.php b/src/wp-admin/includes/revision.php
index df7201e958..ec2460c0ca 100644
--- a/src/wp-admin/includes/revision.php
+++ b/src/wp-admin/includes/revision.php
@@ -407,41 +407,43 @@ function wp_print_revision_templates() {
<strong id="diff-title-to"><?php _ex( 'To:', 'Followed by post revision info' ); ?></strong>
<# } #>
<div class="author-card<# if ( data.attributes.autosave ) { #> autosave<# } #>">
- {{{ data.attributes.author.avatar }}}
- <div class="author-info" id="diff-title-author">
- <# if ( data.attributes.autosave ) { #>
- <span class="byline">
- <?php
- printf(
- /* translators: %s: User's display name. */
- __( 'Autosave by %s' ),
- '<span class="author-name">{{ data.attributes.author.name }}</span>'
- );
- ?>
- </span>
- <# } else if ( data.attributes.current ) { #>
- <span class="byline">
- <?php
- printf(
- /* translators: %s: User's display name. */
- __( 'Current Revision by %s' ),
- '<span class="author-name">{{ data.attributes.author.name }}</span>'
- );
- ?>
- </span>
- <# } else { #>
- <span class="byline">
- <?php
- printf(
- /* translators: %s: User's display name. */
- __( 'Revision by %s' ),
- '<span class="author-name">{{ data.attributes.author.name }}</span>'
- );
- ?>
- </span>
- <# } #>
- <span class="time-ago">{{ data.attributes.timeAgo }}</span>
- <span class="date">({{ data.attributes.dateShort }})</span>
+ <div>
+ {{{ data.attributes.author.avatar }}}
+ <div class="author-info" id="diff-title-author">
+ <# if ( data.attributes.autosave ) { #>
+ <span class="byline">
+ <?php
+ printf(
+ /* translators: %s: User's display name. */
+ __( 'Autosave by %s' ),
+ '<span class="author-name">{{ data.attributes.author.name }}</span>'
+ );
+ ?>
+ </span>
+ <# } else if ( data.attributes.current ) { #>
+ <span class="byline">
+ <?php
+ printf(
+ /* translators: %s: User's display name. */
+ __( 'Current Revision by %s' ),
+ '<span class="author-name">{{ data.attributes.author.name }}</span>'
+ );
+ ?>
+ </span>
+ <# } else { #>
+ <span class="byline">
+ <?php
+ printf(
+ /* translators: %s: User's display name. */
+ __( 'Revision by %s' ),
+ '<span class="author-name">{{ data.attributes.author.name }}</span>'
+ );
+ ?>
+ </span>
+ <# } #>
+ <span class="time-ago">{{ data.attributes.timeAgo }}</span>
+ <span class="date">({{ data.attributes.dateShort }})</span>
+ </div>
</div>
<# if ( 'to' === data.type && data.attributes.restoreUrl ) { #>
<input <?php if ( wp_check_post_lock( $post->ID ) ) { ?>
diff --git a/src/wp-admin/includes/taxonomy.php b/src/wp-admin/includes/taxonomy.php
index 7765084fa7..359cfafe2f 100644
--- a/src/wp-admin/includes/taxonomy.php
+++ b/src/wp-admin/includes/taxonomy.php
@@ -75,7 +75,7 @@ function wp_create_category( $cat_name, $category_parent = 0 ) {
* @param int $post_id Optional. The post ID. Default empty.
* @return int[] Array of IDs of categories assigned to the given post.
*/
-function wp_create_categories( $categories, $post_id = '' ) {
+function wp_create_categories( $categories, $post_id = 0 ) {
$cat_ids = array();
foreach ( $categories as $category ) {
$id = category_exists( $category );
diff --git a/src/wp-admin/includes/template.php b/src/wp-admin/includes/template.php
index 127027d8f5..16da3388ae 100644
--- a/src/wp-admin/includes/template.php
+++ b/src/wp-admin/includes/template.php
@@ -817,9 +817,6 @@ function touch_time( $edit = 1, $for_post = 1, $tab_index = 0, $multi = 0 ) {
$tab_index_attribute = " tabindex=\"$tab_index\"";
}
- // @todo Remove this?
- // echo '<label for="timestamp" style="display: block;"><input type="checkbox" class="checkbox" name="edit_date" value="1" id="timestamp"'.$tab_index_attribute.' /> '.__( 'Edit timestamp' ).'</label><br />';
-
$post_date = ( $for_post ) ? $post->post_date : get_comment()->comment_date;
$jj = ( $edit ) ? mysql2date( 'd', $post_date, false ) : current_time( 'd' );
$mm = ( $edit ) ? mysql2date( 'm', $post_date, false ) : current_time( 'm' );
diff --git a/src/wp-admin/includes/update-core.php b/src/wp-admin/includes/update-core.php
index f1731f9c8f..2d925afa63 100644
--- a/src/wp-admin/includes/update-core.php
+++ b/src/wp-admin/includes/update-core.php
@@ -1023,6 +1023,7 @@ $_new_bundled_files = array(
* @global string[] $_old_requests_files
* @global string[] $_new_bundled_files
* @global wpdb $wpdb WordPress database abstraction object.
+ * @global string $wp_version The WordPress version string.
*
* @param string $from New release unzipped path.
* @param string $to Path to old WordPress installation.
diff --git a/src/wp-admin/includes/upgrade.php b/src/wp-admin/includes/upgrade.php
index d8d3248edb..a3c7260a04 100644
--- a/src/wp-admin/includes/upgrade.php
+++ b/src/wp-admin/includes/upgrade.php
@@ -208,7 +208,7 @@ if ( ! function_exists( 'wp_install_defaults' ) ) :
// First post.
$now = current_time( 'mysql' );
- $now_gmt = current_time( 'mysql', 1 );
+ $now_gmt = current_time( 'mysql', true );
$first_post_guid = get_option( 'home' ) . '/?p=1';
if ( is_multisite() ) {
diff --git a/src/wp-admin/install.php b/src/wp-admin/install.php
index 736c5138e9..13ebf730bd 100644
--- a/src/wp-admin/install.php
+++ b/src/wp-admin/install.php
@@ -233,9 +233,9 @@ if ( is_blog_installed() ) {
/**
* @global string $wp_version The WordPress version string.
- * @global string $required_php_version The required PHP version string.
+ * @global string $required_php_version The minimum required PHP version string.
* @global string[] $required_php_extensions The names of required PHP extensions.
- * @global string $required_mysql_version The required MySQL version string.
+ * @global string $required_mysql_version The minimum required MySQL version string.
* @global wpdb $wpdb WordPress database abstraction object.
*/
global $wp_version, $required_php_version, $required_php_extensions, $required_mysql_version, $wpdb;
diff --git a/src/wp-admin/menu.php b/src/wp-admin/menu.php
index 82136429ba..e4f92b38ba 100644
--- a/src/wp-admin/menu.php
+++ b/src/wp-admin/menu.php
@@ -378,7 +378,7 @@ $menu[75] = array( __( 'Tools' ), 'edit_posts', 'tools.php',
$submenu['tools.php'][20] = array( sprintf( __( 'Site Health %s' ), $site_health_count ), 'view_site_health_checks', 'site-health.php' );
$submenu['tools.php'][25] = array( __( 'Export Personal Data' ), 'export_others_personal_data', 'export-personal-data.php' );
$submenu['tools.php'][30] = array( __( 'Erase Personal Data' ), 'erase_others_personal_data', 'erase-personal-data.php' );
-if ( is_multisite() && ! is_main_site() ) {
+if ( is_multisite() && ! is_main_site() && '1' !== get_site()->deleted ) {
$submenu['tools.php'][35] = array( __( 'Delete Site' ), 'delete_site', 'ms-delete-site.php' );
}
if ( ! is_multisite() && defined( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) {
diff --git a/src/wp-admin/nav-menus.php b/src/wp-admin/nav-menus.php
index 36905bab63..82c8e264ad 100644
--- a/src/wp-admin/nav-menus.php
+++ b/src/wp-admin/nav-menus.php
@@ -1083,7 +1083,7 @@ require_once ABSPATH . 'wp-admin/admin-header.php';
$menu_name_aria_desc = $add_new_screen ? ' aria-describedby="menu-name-desc"' : '';
if ( $one_theme_location_no_menus ) {
- $menu_name_val = 'value="' . esc_attr( 'Menu 1' ) . '"';
+ $menu_name_val = 'value="' . esc_attr__( 'Menu 1' ) . '"';
?>
<input type="hidden" name="zero-menu-state" value="true" />
<?php
diff --git a/src/wp-admin/network/site-info.php b/src/wp-admin/network/site-info.php
index 46f67cced5..a2a86a34e1 100644
--- a/src/wp-admin/network/site-info.php
+++ b/src/wp-admin/network/site-info.php
@@ -200,7 +200,7 @@ if ( ! empty( $messages ) ) {
if ( ! $is_main_site ) {
$attribute_fields['archived'] = __( 'Archived' );
$attribute_fields['spam'] = _x( 'Spam', 'site' );
- $attribute_fields['deleted'] = __( 'Deleted' );
+ $attribute_fields['deleted'] = __( 'Flagged for Deletion' );
}
$attribute_fields['mature'] = __( 'Mature' );
?>
diff --git a/src/wp-admin/network/site-new.php b/src/wp-admin/network/site-new.php
index a3b0919155..d1b0576113 100644
--- a/src/wp-admin/network/site-new.php
+++ b/src/wp-admin/network/site-new.php
@@ -204,7 +204,7 @@ if ( ! empty( $messages ) ) {
}
?>
<p><?php echo wp_required_field_message(); ?></p>
-<form method="post" action="<?php echo esc_url( network_admin_url( 'site-new.php?action=add-site' ) ); ?>" novalidate="novalidate">
+<form method="post" enctype="multipart/form-data" action="<?php echo esc_url( network_admin_url( 'site-new.php?action=add-site' ) ); ?>" novalidate="novalidate">
<?php wp_nonce_field( 'add-blog', '_wpnonce_add-blog' ); ?>
<table class="form-table" role="presentation">
<tr class="form-field form-required">
diff --git a/src/wp-admin/network/sites.php b/src/wp-admin/network/sites.php
index 69ee15d95c..17a072287d 100644
--- a/src/wp-admin/network/sites.php
+++ b/src/wp-admin/network/sites.php
@@ -33,8 +33,8 @@ get_current_screen()->add_help_tab(
'<p>' . __( 'Hovering over each site reveals seven options (three for the primary site):' ) . '</p>' .
'<ul><li>' . __( 'An Edit link to a separate Edit Site screen.' ) . '</li>' .
'<li>' . __( 'Dashboard leads to the Dashboard for that site.' ) . '</li>' .
- '<li>' . __( 'Deactivate, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '</li>' .
- '<li>' . __( 'Delete which is a permanent action after the confirmation screen.' ) . '</li>' .
+ '<li>' . __( 'Flag for Deletion, Archive, and Spam which lead to confirmation screens. These actions can be reversed later.' ) . '</li>' .
+ '<li>' . __( 'Delete Permanently which is a permanent action after the confirmation screen.' ) . '</li>' .
'<li>' . __( 'Visit to go to the front-end of the live site.' ) . '</li></ul>',
)
);
@@ -61,9 +61,9 @@ if ( isset( $_GET['action'] ) ) {
// A list of valid actions and their associated messaging for confirmation output.
$manage_actions = array(
/* translators: %s: Site URL. */
- 'activateblog' => __( 'You are about to activate the site %s.' ),
+ 'activateblog' => __( 'You are about to remove the deletion flag from the site %s.' ),
/* translators: %s: Site URL. */
- 'deactivateblog' => __( 'You are about to deactivate the site %s.' ),
+ 'deactivateblog' => __( 'You are about to flag the site %s for deletion.' ),
/* translators: %s: Site URL. */
'unarchiveblog' => __( 'You are about to unarchive the site %s.' ),
/* translators: %s: Site URL. */
@@ -106,6 +106,7 @@ if ( isset( $_GET['action'] ) ) {
$site_details = get_site( $id );
$site_address = untrailingslashit( $site_details->domain . $site_details->path );
+ $submit = __( 'Confirm' );
require_once ABSPATH . 'wp-admin/admin-header.php';
?>
@@ -124,8 +125,18 @@ if ( isset( $_GET['action'] ) ) {
<p><?php _e( 'Deleting a site is a permanent action that cannot be undone. This will delete the entire site and its uploads directory.' ); ?>
</div>
<?php
- } else {
- $submit = __( 'Confirm' );
+ } elseif ( 'archiveblog' === $site_action ) {
+ ?>
+ <div class="notice notice-warning inline">
+ <p><?php _e( 'Archiving a site makes the site unavailable to its users and visitors. This is a reversible action.' ); ?>
+ </div>
+ <?php
+ } elseif ( 'deactivateblog' === $site_action ) {
+ ?>
+ <div class="notice notice-warning inline">
+ <p><?php _e( 'Flagging a site for deletion makes the site unavailable to its users and visitors. This is a reversible action. A super admin can permanently delete the site at a later date.' ); ?>
+ </div>
+ <?php
}
?>
<p><?php printf( $manage_actions[ $site_action ], "<strong>{$site_address}</strong>" ); ?></p>
@@ -205,6 +216,9 @@ if ( isset( $_GET['action'] ) ) {
<input type="hidden" name="action" value="delete_sites" />
<input type="hidden" name="_wp_http_referer" value="<?php echo esc_attr( wp_get_referer() ); ?>" />
<?php wp_nonce_field( 'ms-delete-sites', '_wpnonce', false ); ?>
+ <div class="notice notice-warning inline">
+ <p><?php _e( 'Deleting a site is a permanent action that cannot be undone. This will delete the entire site and its uploads directory.' ); ?>
+ </div>
<p><?php _e( 'You are about to delete the following sites:' ); ?></p>
<ul class="ul-disc">
<?php
@@ -220,7 +234,7 @@ if ( isset( $_GET['action'] ) ) {
</li>
<?php endforeach; ?>
</ul>
- <?php submit_button( __( 'Confirm' ), 'primary' ); ?>
+ <?php submit_button( __( 'Delete these sites permanently' ), 'primary' ); ?>
</form>
</div>
<?php
@@ -271,22 +285,22 @@ if ( isset( $_GET['action'] ) ) {
update_blog_status( $id, 'deleted', '0' );
/**
- * Fires after a network site is activated.
+ * Fires after a network site has its deletion flag removed.
*
* @since MU (3.0.0)
*
- * @param int $id The ID of the activated site.
+ * @param int $id The ID of the reactivated site.
*/
do_action( 'activate_blog', $id );
break;
case 'deactivateblog':
/**
- * Fires before a network site is deactivated.
+ * Fires before a network site is flagged for deletion.
*
* @since MU (3.0.0)
*
- * @param int $id The ID of the site being deactivated.
+ * @param int $id The ID of the site being flagged for deletion.
*/
do_action( 'deactivate_blog', $id );
@@ -326,10 +340,10 @@ if ( isset( $_GET['updated'] ) ) {
$msg = __( 'Sites marked as spam.' );
break;
case 'all_delete':
- $msg = __( 'Sites deleted.' );
+ $msg = __( 'Sites permanently deleted.' );
break;
case 'delete':
- $msg = __( 'Site deleted.' );
+ $msg = __( 'Site permanently deleted.' );
break;
case 'not_deleted':
$msg = __( 'Sorry, you are not allowed to delete that site.' );
@@ -341,10 +355,10 @@ if ( isset( $_GET['updated'] ) ) {
$msg = __( 'Site unarchived.' );
break;
case 'activateblog':
- $msg = __( 'Site activated.' );
+ $msg = __( 'Site deletion flag removed.' );
break;
case 'deactivateblog':
- $msg = __( 'Site deactivated.' );
+ $msg = __( 'Site flagged for deletion.' );
break;
case 'unspamblog':
$msg = __( 'Site removed from spam.' );
diff --git a/src/wp-admin/options-discussion.php b/src/wp-admin/options-discussion.php
index 6bb8ce2f54..e0e12dc21f 100644
--- a/src/wp-admin/options-discussion.php
+++ b/src/wp-admin/options-discussion.php
@@ -309,6 +309,8 @@ $avatar_defaults = array(
'monsterid' => __( 'MonsterID (Generated)' ),
'retro' => __( 'Retro (Generated)' ),
'robohash' => __( 'RoboHash (Generated)' ),
+ 'initials' => __( 'Initials (Generated)' ),
+ 'color' => __( 'Color (Generated)' ),
);
/**
* Filters the default avatars.
diff --git a/src/wp-admin/options.php b/src/wp-admin/options.php
index 8348b24c8e..23d0f3971b 100644
--- a/src/wp-admin/options.php
+++ b/src/wp-admin/options.php
@@ -404,21 +404,32 @@ foreach ( (array) $options as $option ) :
continue;
}
+ if ( 'home' === $option->option_name && defined( 'WP_HOME' ) ) {
+ $disabled = true;
+ }
+
+ if ( 'siteurl' === $option->option_name && defined( 'WP_SITEURL' ) ) {
+ $disabled = true;
+ }
+
if ( is_serialized( $option->option_value ) ) {
if ( is_serialized_string( $option->option_value ) ) {
// This is a serialized string, so we should display it.
$value = maybe_unserialize( $option->option_value );
$options_to_update[] = $option->option_name;
- $class = 'all-options';
} else {
$value = 'SERIALIZED DATA';
$disabled = true;
- $class = 'all-options disabled';
}
} else {
$value = $option->option_value;
$options_to_update[] = $option->option_name;
- $class = 'all-options';
+ }
+
+ $class = 'all-options';
+
+ if ( $disabled ) {
+ $class .= ' disabled';
}
$name = esc_attr( $option->option_name );
diff --git a/src/wp-admin/post.php b/src/wp-admin/post.php
index 1b8214c9ce..468041c9ea 100644
--- a/src/wp-admin/post.php
+++ b/src/wp-admin/post.php
@@ -160,7 +160,7 @@ switch ( $action ) {
$submenu_file = 'upload.php';
$post_new_file = 'media-new.php';
} else {
- if ( isset( $post_type_object ) && $post_type_object->show_in_menu && true !== $post_type_object->show_in_menu ) {
+ if ( $post_type_object->show_in_menu && true !== $post_type_object->show_in_menu ) {
$parent_file = $post_type_object->show_in_menu;
} else {
$parent_file = "edit.php?post_type=$post_type";
diff --git a/src/wp-admin/upgrade.php b/src/wp-admin/upgrade.php
index ea98082704..f0c9cbbdfd 100644
--- a/src/wp-admin/upgrade.php
+++ b/src/wp-admin/upgrade.php
@@ -37,9 +37,9 @@ if ( 'upgrade_db' === $step ) {
/**
* @global string $wp_version The WordPress version string.
- * @global string $required_php_version The required PHP version string.
+ * @global string $required_php_version The minimum required PHP version string.
* @global string[] $required_php_extensions The names of required PHP extensions.
- * @global string $required_mysql_version The required MySQL version string.
+ * @global string $required_mysql_version The minimum required MySQL version string.
* @global wpdb $wpdb WordPress database abstraction object.
*/
global $wp_version, $required_php_version, $required_php_extensions, $required_mysql_version, $wpdb;
diff --git a/src/wp-admin/user-edit.php b/src/wp-admin/user-edit.php
index c476a294ad..6810425c77 100644
--- a/src/wp-admin/user-edit.php
+++ b/src/wp-admin/user-edit.php
@@ -333,11 +333,11 @@ switch ( $action ) {
<?php if ( count( $_wp_admin_css_colors ) > 1 && has_action( 'admin_color_scheme_picker' ) ) : ?>
<tr class="user-admin-color-wrap">
- <th scope="row"><?php _e( 'Admin Color Scheme' ); ?></th>
+ <th scope="row"><?php _e( 'Administration Color Scheme' ); ?></th>
<td>
<?php
/**
- * Fires in the 'Admin Color Scheme' section of the user editing screen.
+ * Fires in the 'Administration Color Scheme' section of the user editing screen.
*
* The section is only enabled if a callback is hooked to the action,
* and if there is more than one defined color scheme for the admin.
@@ -486,17 +486,35 @@ switch ( $action ) {
<tr class="user-first-name-wrap">
<th><label for="first_name"><?php _e( 'First Name' ); ?></label></th>
- <td><input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profile_user->first_name ); ?>" class="regular-text" /></td>
+ <td>
+ <?php if ( IS_PROFILE_PAGE ) : ?>
+ <input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profile_user->first_name ); ?>" autocomplete="given-name" class="regular-text" />
+ <?php else : ?>
+ <input type="text" name="first_name" id="first_name" value="<?php echo esc_attr( $profile_user->first_name ); ?>" class="regular-text" />
+ <?php endif; ?>
+ </td>
</tr>
<tr class="user-last-name-wrap">
<th><label for="last_name"><?php _e( 'Last Name' ); ?></label></th>
- <td><input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profile_user->last_name ); ?>" class="regular-text" /></td>
+ <td>
+ <?php if ( IS_PROFILE_PAGE ) : ?>
+ <input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profile_user->last_name ); ?>" autocomplete="family-name" class="regular-text" />
+ <?php else : ?>
+ <input type="text" name="last_name" id="last_name" value="<?php echo esc_attr( $profile_user->last_name ); ?>" class="regular-text" />
+ <?php endif; ?>
+ </td>
</tr>
<tr class="user-nickname-wrap">
<th><label for="nickname"><?php _e( 'Nickname' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
- <td><input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profile_user->nickname ); ?>" class="regular-text" /></td>
+ <td>
+ <?php if ( IS_PROFILE_PAGE ) : ?>
+ <input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profile_user->nickname ); ?>" autocomplete="nickname" class="regular-text" />
+ <?php else : ?>
+ <input type="text" name="nickname" id="nickname" value="<?php echo esc_attr( $profile_user->nickname ); ?>" class="regular-text" />
+ <?php endif; ?>
+ </td>
</tr>
<tr class="user-display-name-wrap">
@@ -546,7 +564,7 @@ switch ( $action ) {
<th><label for="email"><?php _e( 'Email' ); ?> <span class="description"><?php _e( '(required)' ); ?></span></label></th>
<td>
<?php if ( $profile_user->ID === $current_user->ID ) : ?>
- <input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profile_user->user_email ); ?>" class="regular-text ltr" />
+ <input type="email" name="email" id="email" aria-describedby="email-description" value="<?php echo esc_attr( $profile_user->user_email ); ?>" autocomplete="email" class="regular-text ltr" />
<p class="description" id="email-description">
<?php _e( 'If you change this, an email will be sent at your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?>
</p>
diff --git a/src/wp-content/themes/twentyeleven/inc/block-patterns.php b/src/wp-content/themes/twentyeleven/inc/block-patterns.php
index bdb2619422..27b37be500 100644
--- a/src/wp-content/themes/twentyeleven/inc/block-patterns.php
+++ b/src/wp-content/themes/twentyeleven/inc/block-patterns.php
@@ -39,7 +39,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
<!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} -->
- <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/patterns/pattern-flower.jpg" alt="' . esc_attr( 'A yellow flower against a dark background.', 'twentyeleven' ) . '" /></figure>
+ <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/patterns/pattern-flower.jpg" alt="' . esc_attr__( 'A yellow flower against a dark background.', 'twentyeleven' ) . '" /></figure>
<!-- /wp:image -->
<!-- wp:paragraph {"dropCap":true} -->
<p class="has-drop-cap">' . esc_html__( 'This is just an example post to showcase the featured post section on the showcase page. Who doesn&#8217;t like flowers? I like flowers. Nullam hendrerit enim nunc. Vestibulum eget nulla magna! Fusce lobortis neque eu neque egestas tincidunt. Duis elementum consequat lorem, in eleifend justo mollis at. Nam quis adipiscing magna. Duis adipiscing est ac nibh feugiat rhoncus. Donec non lorem felis, eget commodo purus.', 'twentyeleven' ) . '</p>
@@ -117,7 +117,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
<!-- /wp:heading --><!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column"><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} -->
- <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/patterns/pattern-woman.jpg" alt="' . esc_attr( 'Photo of a woman.', 'twentyeleven' ) . '" /></figure>
+ <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/patterns/pattern-woman.jpg" alt="' . esc_attr__( 'Photo of a woman.', 'twentyeleven' ) . '" /></figure>
<!-- /wp:image --></div>
<!-- /wp:column -->
<!-- wp:column -->
diff --git a/src/wp-content/themes/twentyfourteen/css/blocks.css b/src/wp-content/themes/twentyfourteen/css/blocks.css
index 4d001f5289..102d5e2508 100644
--- a/src/wp-content/themes/twentyfourteen/css/blocks.css
+++ b/src/wp-content/themes/twentyfourteen/css/blocks.css
@@ -368,7 +368,7 @@ p.has-drop-cap:not(:focus)::first-letter {
color: #41a62a;
}
-.widget-area .wp-block-latest-comments__comment-meta a {
+.widget-area:where(:not(.content-sidebar)) .wp-block-latest-comments__comment-meta a {
color: #fff;
}
diff --git a/src/wp-content/themes/twentyfourteen/inc/block-patterns.php b/src/wp-content/themes/twentyfourteen/inc/block-patterns.php
index ac40532cfb..b3bc376192 100644
--- a/src/wp-content/themes/twentyfourteen/inc/block-patterns.php
+++ b/src/wp-content/themes/twentyfourteen/inc/block-patterns.php
@@ -55,7 +55,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
'title' => esc_html__( 'Summary', 'twentyfourteen' ),
'categories' => array( 'twentyfourteen' ),
'viewportWidth' => 1000,
- 'content' => '<!-- wp:group {"backgroundColor":"light-gray"} --><div class="wp-block-group has-light-gray-background-color has-background"><div class="wp-block-group__inner-container"><!-- wp:spacer {"height":50} --><div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div><!-- /wp:spacer --><!-- wp:heading {"level":3,"style":{"typography":{"lineHeight":"1.5"}}} --><h3 style="line-height:1.5">' . esc_html__( 'Traveling Nostalgia', 'twentyfourteen' ) . '</h3><!-- /wp:heading --><!-- wp:paragraph --><p><em>' . esc_html__( 'Here are some photos from my all-time favorite destinations.', 'twentyfourteen' ) . '</em></p><!-- /wp:paragraph --><!-- wp:columns --><div class="wp-block-columns"><!-- wp:column --><div class="wp-block-column"><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/sunset.jpg" alt="' . esc_html__( 'Photo of a sunset', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Sunset', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/bridge.jpg" alt="' . esc_attr__( 'Photo of a bridge', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Bridge', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --></div><!-- /wp:column --><!-- wp:column --><div class="wp-block-column"><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/street.jpg" alt="' . esc_attr__( 'Photo of a streetscape', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Streetscape', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/clouds.jpg" alt="' . esc_attr__( 'Photo of a cloudy mountain', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Clouds', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --></div><!-- /wp:column --></div><!-- /wp:columns --><!-- wp:buttons --><div class="wp-block-buttons"><!-- wp:button {"borderRadius":0,"backgroundColor":"dark-gray"} --><div class="wp-block-button"><a class="wp-block-button__link has-dark-gray-background-color has-background no-border-radius">' . esc_html__( 'Read More', 'twentyfourteen' ) . '</a></div><!-- /wp:button --></div><!-- /wp:buttons --><!-- wp:spacer {"height":50} --><div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div><!-- /wp:spacer --></div></div><!-- /wp:group -->',
+ 'content' => '<!-- wp:group {"backgroundColor":"light-gray"} --><div class="wp-block-group has-light-gray-background-color has-background"><div class="wp-block-group__inner-container"><!-- wp:spacer {"height":50} --><div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div><!-- /wp:spacer --><!-- wp:heading {"level":3,"style":{"typography":{"lineHeight":"1.5"}}} --><h3 style="line-height:1.5">' . esc_html__( 'Traveling Nostalgia', 'twentyfourteen' ) . '</h3><!-- /wp:heading --><!-- wp:paragraph --><p><em>' . esc_html__( 'Here are some photos from my all-time favorite destinations.', 'twentyfourteen' ) . '</em></p><!-- /wp:paragraph --><!-- wp:columns --><div class="wp-block-columns"><!-- wp:column --><div class="wp-block-column"><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/sunset.jpg" alt="' . esc_attr__( 'Photo of a sunset', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Sunset', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/bridge.jpg" alt="' . esc_attr__( 'Photo of a bridge', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Bridge', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --></div><!-- /wp:column --><!-- wp:column --><div class="wp-block-column"><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/street.jpg" alt="' . esc_attr__( 'Photo of a streetscape', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Streetscape', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --><!-- wp:image {"id":null,"sizeSlug":"large","linkDestination":"none"} --><figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/images/clouds.jpg" alt="' . esc_attr__( 'Photo of a cloudy mountain', 'twentyfourteen' ) . '"/><figcaption><span class="has-inline-color has-dark-gray-color">' . esc_html__( 'Clouds', 'twentyfourteen' ) . '</span></figcaption></figure><!-- /wp:image --></div><!-- /wp:column --></div><!-- /wp:columns --><!-- wp:buttons --><div class="wp-block-buttons"><!-- wp:button {"borderRadius":0,"backgroundColor":"dark-gray"} --><div class="wp-block-button"><a class="wp-block-button__link has-dark-gray-background-color has-background no-border-radius">' . esc_html__( 'Read More', 'twentyfourteen' ) . '</a></div><!-- /wp:button --></div><!-- /wp:buttons --><!-- wp:spacer {"height":50} --><div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div><!-- /wp:spacer --></div></div><!-- /wp:group -->',
)
);
diff --git a/src/wp-content/themes/twentynineteen/inc/block-patterns.php b/src/wp-content/themes/twentynineteen/inc/block-patterns.php
index 1615495a6f..63154c6d0a 100644
--- a/src/wp-content/themes/twentynineteen/inc/block-patterns.php
+++ b/src/wp-content/themes/twentynineteen/inc/block-patterns.php
@@ -100,34 +100,34 @@ if ( function_exists( 'register_block_pattern' ) ) {
'<!-- wp:columns {"className":"has-2-columns"} -->',
'<div class="wp-block-columns has-2-columns"><!-- wp:column -->',
'<div class="wp-block-column"><!-- wp:media-text {"mediaLink":"' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg","mediaType":"image","mediaWidth":10,"isStackedOnMobile":false} -->',
- '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
+ '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
'<p>' . esc_html__( 'Website Design', 'twentynineteen' ) . '</p>',
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text -->',
'<!-- wp:media-text {"mediaLink":"' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg","mediaType":"image","mediaWidth":10,"isStackedOnMobile":false} -->',
- '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
+ '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
'<p>' . esc_html__( 'Mobile', 'twentynineteen' ) . '</p>',
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text -->',
'<!-- wp:media-text {"mediaLink":"' . esc_url( get_template_directory_uri() ) . '/images/pattern_03.jpg","mediaType":"image","mediaWidth":10,"isStackedOnMobile":false} -->',
- '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_03.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
+ '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_03.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
'<p>' . esc_html__( 'Social Media', 'twentynineteen' ) . '</p>',
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text --></div>',
'<!-- /wp:column -->',
'<!-- wp:column -->',
'<div class="wp-block-column"><!-- wp:media-text {"mediaLink":"' . esc_url( get_template_directory_uri() ) . '/images/pattern_03.jpg","mediaType":"image","mediaWidth":10,"isStackedOnMobile":false} -->',
- '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_03.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
+ '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_03.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
'<p>' . esc_html__( 'Marketing', 'twentynineteen' ) . '</p>',
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text -->',
'<!-- wp:media-text {"mediaLink":"' . esc_url( get_template_directory_uri() ) . '/images/pattern_04.jpg","mediaType":"image","mediaWidth":10,"isStackedOnMobile":false} -->',
- '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_04.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
+ '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_04.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
'<p>' . esc_html__( 'Copywriting', 'twentynineteen' ) . '</p>',
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text -->',
'<!-- wp:media-text {"mediaLink":"' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg","mediaType":"image","mediaWidth":10,"isStackedOnMobile":false} -->',
- '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
+ '<div class="wp-block-media-text alignwide" style="grid-template-columns:10% auto"><figure class="wp-block-media-text__media"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:paragraph -->',
'<p>' . esc_html__( 'Content Strategy', 'twentynineteen' ) . '</p>',
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text --></div>',
@@ -152,7 +152,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
'<h2>' . esc_html__( 'Team', 'twentynineteen' ) . '</h2>',
'<!-- /wp:heading -->',
'<!-- wp:media-text {"mediaType":"image","mediaWidth":28,"imageFill":true} -->',
- '<div class="wp-block-media-text alignwide is-stacked-on-mobile is-image-fill" style="grid-template-columns:28% auto"><figure class="wp-block-media-text__media" style="background-image:url(' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg);background-position:50% 50%"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:heading {"level":3} -->',
+ '<div class="wp-block-media-text alignwide is-stacked-on-mobile is-image-fill" style="grid-template-columns:28% auto"><figure class="wp-block-media-text__media" style="background-image:url(' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg);background-position:50% 50%"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_01.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:heading {"level":3} -->',
'<h3>' . esc_html__( 'Eva Young', 'twentynineteen' ) . '</h3>',
'<!-- /wp:heading -->',
'<!-- wp:paragraph -->',
@@ -160,7 +160,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
'<!-- /wp:paragraph --></div></div>',
'<!-- /wp:media-text -->',
'<!-- wp:media-text {"mediaType":"image","mediaWidth":28,"imageFill":true} -->',
- '<div class="wp-block-media-text alignwide is-stacked-on-mobile is-image-fill" style="grid-template-columns:28% auto"><figure class="wp-block-media-text__media" style="background-image:url(' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg);background-position:50% 50%"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg" alt="' . esc_html__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:heading {"level":3} -->',
+ '<div class="wp-block-media-text alignwide is-stacked-on-mobile is-image-fill" style="grid-template-columns:28% auto"><figure class="wp-block-media-text__media" style="background-image:url(' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg);background-position:50% 50%"><img src="' . esc_url( get_template_directory_uri() ) . '/images/pattern_02.jpg" alt="' . esc_attr__( 'Gradient', 'twentynineteen' ) . '"/></figure><div class="wp-block-media-text__content"><!-- wp:heading {"level":3} -->',
'<h3>' . esc_html__( 'Doug Watson', 'twentynineteen' ) . '</h3>',
'<!-- /wp:heading -->',
'<!-- wp:paragraph -->',
diff --git a/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss b/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss
index d1e30256f3..6d6d744ed8 100644
--- a/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss
+++ b/src/wp-content/themes/twentynineteen/sass/navigation/_menu-main-navigation.scss
@@ -433,9 +433,13 @@
white-space: inherit;
}
+ &:not(:has(.sub-menu.expanded-true)) {
+ overflow-y: scroll;
+ }
+
&.expanded-true {
- display: table;
+ display: block;
margin-top: 0;
opacity: 1;
padding-left: 0;
diff --git a/src/wp-content/themes/twentynineteen/style-rtl.css b/src/wp-content/themes/twentynineteen/style-rtl.css
index da1b3636c0..9f1700c012 100644
--- a/src/wp-content/themes/twentynineteen/style-rtl.css
+++ b/src/wp-content/themes/twentynineteen/style-rtl.css
@@ -3271,8 +3271,12 @@ body.page .main-navigation {
white-space: inherit;
}
+.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu:not(:has(.sub-menu.expanded-true)) {
+ overflow-y: scroll;
+}
+
.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true {
- display: table;
+ display: block;
margin-top: 0;
opacity: 1;
padding-right: 0;
diff --git a/src/wp-content/themes/twentynineteen/style.css b/src/wp-content/themes/twentynineteen/style.css
index 2124cf584f..634a947b3a 100644
--- a/src/wp-content/themes/twentynineteen/style.css
+++ b/src/wp-content/themes/twentynineteen/style.css
@@ -3271,8 +3271,12 @@ body.page .main-navigation {
white-space: inherit;
}
+.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu:not(:has(.sub-menu.expanded-true)) {
+ overflow-y: scroll;
+}
+
.main-navigation .main-menu .menu-item-has-children.off-canvas .sub-menu.expanded-true {
- display: table;
+ display: block;
margin-top: 0;
opacity: 1;
padding-left: 0;
diff --git a/src/wp-content/themes/twentyseventeen/inc/block-patterns.php b/src/wp-content/themes/twentyseventeen/inc/block-patterns.php
index f013aa9a54..e924ce7e29 100644
--- a/src/wp-content/themes/twentyseventeen/inc/block-patterns.php
+++ b/src/wp-content/themes/twentyseventeen/inc/block-patterns.php
@@ -14,7 +14,7 @@ if ( function_exists( 'register_block_pattern_category' ) ) {
register_block_pattern_category(
'twentyseventeen',
- array( 'label' => __( 'Twenty Seventeen', 'twentyseventeen' ) )
+ array( 'label' => esc_html__( 'Twenty Seventeen', 'twentyseventeen' ) )
);
}
@@ -25,15 +25,15 @@ if ( function_exists( 'register_block_pattern' ) ) {
register_block_pattern(
'twentyseventeen/large-heading-with-button',
array(
- 'title' => __( 'Large Heading with Button', 'twentyseventeen' ),
+ 'title' => esc_html__( 'Large Heading with Button', 'twentyseventeen' ),
'categories' => array( 'twentyseventeen' ),
'content' => '<!-- wp:heading {"level":1,"textColor":"black","style":{"typography":{"fontSize":50}}} -->
- <h1 class="has-black-color has-text-color" style="font-size:50px">' . __( 'Attract Leads with Marketing Campaigns that Work', 'twentyseventeen' ) . '</h1>
+ <h1 class="has-black-color has-text-color" style="font-size:50px">' . esc_html__( 'Attract Leads with Marketing Campaigns that Work', 'twentyseventeen' ) . '</h1>
<!-- /wp:heading -->
<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"borderRadius":0,"className":"is-style-fill"} -->
- <div class="wp-block-button is-style-fill"><a class="wp-block-button__link no-border-radius">' . __( 'Our Services', 'twentyseventeen' ) . '</a></div>
+ <div class="wp-block-button is-style-fill"><a class="wp-block-button__link no-border-radius">' . esc_html__( 'Our Services', 'twentyseventeen' ) . '</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons -->',
)
@@ -42,7 +42,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
register_block_pattern(
'twentyseventeen/images-with-text-and-link',
array(
- 'title' => __( 'Images with Text and Link', 'twentyseventeen' ),
+ 'title' => esc_html__( 'Images with Text and Link', 'twentyseventeen' ),
'categories' => array( 'twentyseventeen' ),
'content' => '<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
@@ -51,16 +51,16 @@ if ( function_exists( 'register_block_pattern' ) ) {
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column">
<!-- wp:image {"className":"size-large"} -->
- <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/stripes.jpg" alt="' . __( 'Black Stripes', 'twentyseventeen' ) . '"/></figure>
+ <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/stripes.jpg" alt="' . esc_attr__( 'Black Stripes', 'twentyseventeen' ) . '"/></figure>
<!-- /wp:image -->
<!-- wp:heading {"textColor":"black","style":{"typography":{"fontSize":45}}} -->
- <h2 class="has-black-color has-text-color" style="font-size:45px">' . __( 'Branding', 'twentyseventeen' ) . '</h2>
+ <h2 class="has-black-color has-text-color" style="font-size:45px">' . esc_html__( 'Branding', 'twentyseventeen' ) . '</h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"textColor":"black","style":{"typography":{"lineHeight":"1.8"}}} -->
- <p class="has-black-color has-text-color" style="line-height:1.8">' . __( 'Communicate your purpose and goals with a beautiful logo that encapsulates your business.', 'twentyseventeen' ) . '</p>
+ <p class="has-black-color has-text-color" style="line-height:1.8">' . esc_html__( 'Communicate your purpose and goals with a beautiful logo that encapsulates your business.', 'twentyseventeen' ) . '</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"3"}}} -->
- <p style="line-height:3"><a href="#"><strong>' . __( 'See Case Study', 'twentyseventeen' ) . ' →</strong></a></p>
+ <p style="line-height:3"><a href="#"><strong>' . esc_html__( 'See Case Study', 'twentyseventeen' ) . ' →</strong></a></p>
<!-- /wp:paragraph --></div>
<!-- /wp:column -->
<!-- wp:column -->
@@ -68,16 +68,16 @@ if ( function_exists( 'register_block_pattern' ) ) {
<div style="height:254px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->
<!-- wp:image {"className":"size-large"} -->
- <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/white-border.jpg" alt="' . __( 'White border', 'twentyseventeen' ) . '"/></figure>
+ <figure class="wp-block-image size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/white-border.jpg" alt="' . esc_attr__( 'White border', 'twentyseventeen' ) . '"/></figure>
<!-- /wp:image -->
<!-- wp:heading {"textColor":"black","style":{"typography":{"fontSize":45}}} -->
- <h2 class="has-black-color has-text-color" style="font-size:45px">' . __( 'Web Design', 'twentyseventeen' ) . '</h2>
+ <h2 class="has-black-color has-text-color" style="font-size:45px">' . esc_html__( 'Web Design', 'twentyseventeen' ) . '</h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"textColor":"black","style":{"typography":{"lineHeight":"1.8"}}} -->
- <p class="has-black-color has-text-color" style="line-height:1.8">' . __( 'Need a website? We&#39;ve got you covered. Our design team will create a stunning design to transform your brand.', 'twentyseventeen' ) . '</p>
+ <p class="has-black-color has-text-color" style="line-height:1.8">' . esc_html__( 'Need a website? We&#39;ve got you covered. Our design team will create a stunning design to transform your brand.', 'twentyseventeen' ) . '</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph {"style":{"typography":{"lineHeight":"3.0"}}} -->
- <p style="line-height:3.0"><a href="#"><strong>' . __( 'See Case Study', 'twentyseventeen' ) . ' →</strong></a></p>
+ <p style="line-height:3.0"><a href="#"><strong>' . esc_html__( 'See Case Study', 'twentyseventeen' ) . ' →</strong></a></p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->',
@@ -87,7 +87,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
register_block_pattern(
'twentyseventeen/images-with-link',
array(
- 'title' => __( 'Images with Link', 'twentyseventeen' ),
+ 'title' => esc_html__( 'Images with Link', 'twentyseventeen' ),
'categories' => array( 'twentyseventeen' ),
'content' => '<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
@@ -97,13 +97,13 @@ if ( function_exists( 'register_block_pattern' ) ) {
<div class="wp-block-column"><!-- wp:group -->
<div class="wp-block-group"><div class="wp-block-group__inner-container">
<!-- wp:image {"align":"center","sizeSlug":"large","className":"is-style-default"} -->
- <div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/stripes.jpg" alt="' . __( 'Black Stripes', 'twentyseventeen' ) . '"/></figure></div>
+ <div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/stripes.jpg" alt="' . esc_attr__( 'Black Stripes', 'twentyseventeen' ) . '"/></figure></div>
<!-- /wp:image -->
<!-- wp:heading {"align":"left","textColor":"black","style":{"typography":{"fontSize":30}}} -->
- <h2 class="has-text-align-left has-black-color has-text-color" style="font-size:30px">' . __( 'Branding', 'twentyseventeen' ) . '</h2>
+ <h2 class="has-text-align-left has-black-color has-text-color" style="font-size:30px">' . esc_html__( 'Branding', 'twentyseventeen' ) . '</h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"align":"left"} -->
- <p class="has-text-align-left"><a href="#">' . __( 'See Case Study', 'twentyseventeen' ) . ' →</a></p>
+ <p class="has-text-align-left"><a href="#">' . esc_html__( 'See Case Study', 'twentyseventeen' ) . ' →</a></p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:group --></div>
<!-- /wp:column -->
@@ -111,13 +111,13 @@ if ( function_exists( 'register_block_pattern' ) ) {
<div class="wp-block-column"><!-- wp:group -->
<div class="wp-block-group"><div class="wp-block-group__inner-container">
<!-- wp:image {"align":"center","sizeSlug":"large","className":"is-style-default"} -->
- <div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/white-border.jpg" alt="' . __( 'White border', 'twentyseventeen' ) . '"/></figure></div>
+ <div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/white-border.jpg" alt="' . esc_attr__( 'White border', 'twentyseventeen' ) . '"/></figure></div>
<!-- /wp:image -->
<!-- wp:heading {"align":"left","textColor":"black","style":{"typography":{"fontSize":30}}} -->
- <h2 class="has-text-align-left has-black-color has-text-color" style="font-size:30px">' . __( 'Design', 'twentyseventeen' ) . '</h2>
+ <h2 class="has-text-align-left has-black-color has-text-color" style="font-size:30px">' . esc_html__( 'Design', 'twentyseventeen' ) . '</h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"align":"left"} -->
- <p class="has-text-align-left"><a href="#">' . __( 'See Case Study', 'twentyseventeen' ) . ' →</a></p>
+ <p class="has-text-align-left"><a href="#">' . esc_html__( 'See Case Study', 'twentyseventeen' ) . ' →</a></p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:group --></div>
<!-- /wp:column -->
@@ -125,13 +125,13 @@ if ( function_exists( 'register_block_pattern' ) ) {
<div class="wp-block-column"><!-- wp:group -->
<div class="wp-block-group"><div class="wp-block-group__inner-container">
<!-- wp:image {"align":"center","sizeSlug":"large","className":"is-style-default"} -->
- <div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/direct-light.jpg" alt="' . __( 'Direct Light', 'twentyseventeen' ) . '"/></figure></div>
+ <div class="wp-block-image is-style-default"><figure class="aligncenter size-large"><img src="' . esc_url( get_template_directory_uri() ) . '/assets/images/direct-light.jpg" alt="' . esc_attr__( 'Direct Light', 'twentyseventeen' ) . '"/></figure></div>
<!-- /wp:image -->
<!-- wp:heading {"align":"left","textColor":"black","style":{"typography":{"fontSize":30}}} -->
- <h2 class="has-text-align-left has-black-color has-text-color" style="font-size:30px">' . __( 'Strategy', 'twentyseventeen' ) . '</h2>
+ <h2 class="has-text-align-left has-black-color has-text-color" style="font-size:30px">' . esc_html__( 'Strategy', 'twentyseventeen' ) . '</h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"align":"left"} -->
- <p class="has-text-align-left"><a href="#">' . __( 'See Case Study', 'twentyseventeen' ) . ' →</a></p>
+ <p class="has-text-align-left"><a href="#">' . esc_html__( 'See Case Study', 'twentyseventeen' ) . ' →</a></p>
<!-- /wp:paragraph --></div></div>
<!-- /wp:group --></div>
<!-- /wp:column --></div>
@@ -145,21 +145,21 @@ if ( function_exists( 'register_block_pattern' ) ) {
register_block_pattern(
'twentyseventeen/services',
array(
- 'title' => __( 'Services', 'twentyseventeen' ),
+ 'title' => esc_html__( 'Services', 'twentyseventeen' ),
'categories' => array( 'twentyseventeen' ),
'content' => '<!-- wp:spacer -->
<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<!-- /wp:spacer -->
<!-- wp:heading {"level":1,"style":{"typography":{"fontSize":50}}} -->
- <h1 style="font-size:50px">' . __( 'Our Services', 'twentyseventeen' ) . '</h1>
+ <h1 style="font-size:50px">' . esc_html__( 'Our Services', 'twentyseventeen' ) . '</h1>
<!-- /wp:heading -->
<!-- wp:columns -->
<div class="wp-block-columns"><!-- wp:column -->
<div class="wp-block-column">
<!-- wp:paragraph {"style":{"typography":{"fontSize":21, "lineHeight":"2.5"}}} -->
- <p style="font-size:21px"><a href="#">' . __( 'Branding', 'twentyseventeen' ) . ' →</a><br><a href="#">' . __( 'Web Design', 'twentyseventeen' ) . ' →</a><br><a href="#">' . __( 'Web Development', 'twentyseventeen' ) . ' →</a></p>
+ <p style="font-size:21px"><a href="#">' . esc_html__( 'Branding', 'twentyseventeen' ) . ' →</a><br><a href="#">' . esc_html__( 'Web Design', 'twentyseventeen' ) . ' →</a><br><a href="#">' . esc_html__( 'Web Development', 'twentyseventeen' ) . ' →</a></p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:column -->
@@ -167,7 +167,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
<!-- wp:column -->
<div class="wp-block-column">
<!-- wp:paragraph {"style":{"typography":{"fontSize":21, "lineHeight":"2.5"}}} -->
- <p style="font-size:21px"><a href="#">' . __( 'Content Strategy', 'twentyseventeen' ) . ' →</a><br><a href="#">' . __( 'Marketing &amp; SEO', 'twentyseventeen' ) . ' →</a><br><a href="#">' . __( 'Video Production', 'twentyseventeen' ) . ' →</a></p>
+ <p style="font-size:21px"><a href="#">' . esc_html__( 'Content Strategy', 'twentyseventeen' ) . ' →</a><br><a href="#">' . esc_html__( 'Marketing &amp; SEO', 'twentyseventeen' ) . ' →</a><br><a href="#">' . esc_html__( 'Video Production', 'twentyseventeen' ) . ' →</a></p>
<!-- /wp:paragraph --></div>
<!-- /wp:column --></div>
<!-- /wp:columns -->
@@ -181,16 +181,16 @@ if ( function_exists( 'register_block_pattern' ) ) {
register_block_pattern(
'twentyseventeen/contact-us',
array(
- 'title' => __( 'Contact Us', 'twentyseventeen' ),
+ 'title' => esc_html__( 'Contact Us', 'twentyseventeen' ),
'categories' => array( 'twentyseventeen' ),
'content' => '<!-- wp:cover {"customOverlayColor":"#93aab8","minHeight":700,"align":"center"} -->
<div class="wp-block-cover aligncenter has-background-dim" style="background-color:#93aab8;min-height:700px"><div class="wp-block-cover__inner-container"><!-- wp:paragraph {"align":"left","textColor":"white","style":{"typography":{"fontSize":50}}} -->
- <p class="has-text-align-left has-white-color has-text-color" style="font-size:50px">' . __( 'We are proud to serve outstanding clients.', 'twentyseventeen' ) . '</p>
+ <p class="has-text-align-left has-white-color has-text-color" style="font-size:50px">' . esc_html__( 'We are proud to serve outstanding clients.', 'twentyseventeen' ) . '</p>
<!-- /wp:paragraph -->
<!-- wp:buttons -->
<div class="wp-block-buttons"><!-- wp:button {"borderRadius":0,"backgroundColor":"black","textColor":"white","className":"is-style-fill"} -->
- <div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-white-color has-black-background-color has-text-color has-background no-border-radius">' . __( 'Contact us', 'twentyseventeen' ) . '</a></div>
+ <div class="wp-block-button is-style-fill"><a class="wp-block-button__link has-white-color has-black-background-color has-text-color has-background no-border-radius">' . esc_html__( 'Contact us', 'twentyseventeen' ) . '</a></div>
<!-- /wp:button --></div>
<!-- /wp:buttons --></div></div>
<!-- /wp:cover -->',
diff --git a/src/wp-content/themes/twentysixteen/css/editor-blocks.css b/src/wp-content/themes/twentysixteen/css/editor-blocks.css
index 0ab68afe8a..a8648668cd 100644
--- a/src/wp-content/themes/twentysixteen/css/editor-blocks.css
+++ b/src/wp-content/themes/twentysixteen/css/editor-blocks.css
@@ -370,6 +370,10 @@ figure[class*="wp-block-"] > figcaption {
padding-right: 0;
}
+.wp-block-quote.is-style-plain {
+ border: none;
+}
+
@media screen and (min-width: 44.375em) {
.wp-block-quote.alignleft,
.wp-block-quote.alignright {
diff --git a/src/wp-content/themes/twentythirteen/inc/block-patterns.php b/src/wp-content/themes/twentythirteen/inc/block-patterns.php
index 3475b63a4c..d8630149c3 100644
--- a/src/wp-content/themes/twentythirteen/inc/block-patterns.php
+++ b/src/wp-content/themes/twentythirteen/inc/block-patterns.php
@@ -33,7 +33,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
'categories' => array( 'twentythirteen' ),
'content' => '<!-- wp:cover {"overlayColor":"yellow","minHeight":100,"minHeightUnit":"vh","align":"full"} -->
<div class="wp-block-cover alignfull has-yellow-background-color has-background-dim" style="min-height:100vh"><div class="wp-block-cover__inner-container"><!-- wp:gallery {"ids":[null,null,null,null,null,null,null,null,null],"linkTo":"none"} -->
- <figure class="wp-block-gallery columns-3 is-cropped"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#1" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#1" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/torus-interior.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, interior view of torus colony. Public spaces appear in the foreground of the torus, while housing, rolling hills, and a river snake up into the background.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/torus-interior.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#2" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#2" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/cylinder-interior.jpg" alt="alt="' . esc_attr__( 'NASA Space Colony illustration, interior view of a cylindrical space colony, looking out through large windows. The interior contains fields, forests, and a river snaking from the foreground into the background. Low clouds hang over the land.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/cylinder-interior.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/orange.jpg" alt="' . esc_attr__( 'Solid orange square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/orange.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/toroidal-colony.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, cutaway view, exposing the interior of a toroidal colony. Trees and densely-packed housing line the inside of the torus.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/toroidal-colony.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#3" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#3" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/bernal-cutaway.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, cutaway view of Bernal Sphere. The interior of the sphere is filled with greenery and houses, and a star shines brightly behind the colony.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/bernal-cutaway.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#4" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#4" data-link="#"/></figure></li></ul></figure>
+ <figure class="wp-block-gallery columns-3 is-cropped"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#1" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#1" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/torus-interior.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, interior view of torus colony. Public spaces appear in the foreground of the torus, while housing, rolling hills, and a river snake up into the background.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/torus-interior.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#2" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#2" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/cylinder-interior.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, interior view of a cylindrical space colony, looking out through large windows. The interior contains fields, forests, and a river snaking from the foreground into the background. Low clouds hang over the land.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/cylinder-interior.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/orange.jpg" alt="' . esc_attr__( 'Solid orange square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/orange.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/toroidal-colony.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, cutaway view, exposing the interior of a toroidal colony. Trees and densely-packed housing line the inside of the torus.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/toroidal-colony.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#3" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#3" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/bernal-cutaway.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, cutaway view of Bernal Sphere. The interior of the sphere is filled with greenery and houses, and a star shines brightly behind the colony.', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/bernal-cutaway.jpg" data-link="#"/></figure></li><li class="blocks-gallery-item"><figure><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#4" alt="' . esc_attr__( 'Solid red square', 'twentythirteen' ) . '" data-full-url="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/dark-red.jpg#4" data-link="#"/></figure></li></ul></figure>
<!-- /wp:gallery --></div></div>
<!-- /wp:cover -->',
)
@@ -129,7 +129,7 @@ if ( function_exists( 'register_block_pattern' ) ) {
'blockTypes' => array( 'core/quote' ),
'content' => '<!-- wp:cover {"overlayColor":"dark-gray","minHeight":100,"minHeightUnit":"vh","align":"full"} -->
<div class="wp-block-cover alignfull has-dark-gray-background-color has-background-dim" style="min-height:100vh"><div class="wp-block-cover__inner-container"><!-- wp:image {"align":"center","sizeSlug":"thumbnail","linkDestination":"none","className":"is-style-rounded"} -->
- <div class="wp-block-image is-style-rounded"><figure class="aligncenter size-thumbnail"><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/bernal-cutaway.jpg" alt="alt="' . esc_attr__( 'NASA Space Colony illustration, cutaway view of Bernal Sphere. The interior of the sphere is filled with greenery and houses, and a star shines brightly behind the colony.', 'twentythirteen' ) . '"/></figure></div>
+ <div class="wp-block-image is-style-rounded"><figure class="aligncenter size-thumbnail"><img src="' . esc_url( get_template_directory_uri() ) . '/images/block-patterns/bernal-cutaway.jpg" alt="' . esc_attr__( 'NASA Space Colony illustration, cutaway view of Bernal Sphere. The interior of the sphere is filled with greenery and houses, and a star shines brightly behind the colony.', 'twentythirteen' ) . '"/></figure></div>
<!-- /wp:image -->
<!-- wp:quote {"align":"center","className":"is-style-large"} -->
diff --git a/src/wp-content/themes/twentytwelve/css/editor-blocks.css b/src/wp-content/themes/twentytwelve/css/editor-blocks.css
index 85dd813bf2..25ddf21943 100644
--- a/src/wp-content/themes/twentytwelve/css/editor-blocks.css
+++ b/src/wp-content/themes/twentytwelve/css/editor-blocks.css
@@ -141,18 +141,14 @@ Description: Used to style blocks in the editor.
/* Captions */
+[class*=" wp-block-"] figcaption,
[class^="wp-block-"] figcaption,
[class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body {
color: #757575;
font-size: 12px;
line-height: 2;
font-style: italic;
- text-align: left;
-}
-
-.rtl [class^="wp-block-"] figcaption,
-.rtl [class^="wp-block-"] figcaption.editor-rich-text__tinymce.mce-content-body {
- text-align: right;
+ text-align: start;
}
/* Definition Lists */
diff --git a/src/wp-content/themes/twentytwenty/assets/js/index.js b/src/wp-content/themes/twentytwenty/assets/js/index.js
index 258658a97e..35efcd6b60 100644
--- a/src/wp-content/themes/twentytwenty/assets/js/index.js
+++ b/src/wp-content/themes/twentytwenty/assets/js/index.js
@@ -257,7 +257,10 @@ twentytwenty.coverModals = {
clickedEl = false;
}
- _win.scrollTo( 0, Math.abs( _win.twentytwenty.scrolled + getAdminBarHeight() ) );
+ _win.scrollTo({
+ top: Math.abs( _win.twentytwenty.scrolled + getAdminBarHeight() ),
+ behavior: 'instant'
+ });
_win.twentytwenty.scrolled = 0;
}, 500 );
diff --git a/src/wp-content/themes/twentytwenty/functions.php b/src/wp-content/themes/twentytwenty/functions.php
index 96945243fa..a3ca940c4d 100644
--- a/src/wp-content/themes/twentytwenty/functions.php
+++ b/src/wp-content/themes/twentytwenty/functions.php
@@ -361,7 +361,11 @@ if ( ! function_exists( 'wp_body_open' ) ) {
* @since Twenty Twenty 1.0
*/
function wp_body_open() {
- /** This action is documented in wp-includes/general-template.php */
+ /**
+ * Triggered after the opening <body> tag.
+ *
+ * @since Twenty Twenty 1.0
+ */
do_action( 'wp_body_open' );
}
}
diff --git a/src/wp-content/themes/twentytwentyone/assets/js/primary-navigation.js b/src/wp-content/themes/twentytwentyone/assets/js/primary-navigation.js
index 8b3739865f..313a14a147 100644
--- a/src/wp-content/themes/twentytwentyone/assets/js/primary-navigation.js
+++ b/src/wp-content/themes/twentytwentyone/assets/js/primary-navigation.js
@@ -211,7 +211,7 @@ function twentytwentyoneExpandSubMenu( el ) { // jshint ignore:line
} );
};
- window.addEventListener( 'load', function() {
+ document.addEventListener( 'DOMContentLoaded', function() {
new navMenu( 'primary' );
} );
}() );
diff --git a/src/wp-includes/author-template.php b/src/wp-includes/author-template.php
index 184d7d0f38..a48a6d3e6e 100644
--- a/src/wp-includes/author-template.php
+++ b/src/wp-includes/author-template.php
@@ -286,7 +286,7 @@ function get_the_author_posts() {
if ( ! $post ) {
return 0;
}
- return count_user_posts( $post->post_author, $post->post_type );
+ return (int) count_user_posts( $post->post_author, $post->post_type );
}
/**
diff --git a/src/wp-includes/block-template-utils.php b/src/wp-includes/block-template-utils.php
index faea7d5e83..718eb31e33 100644
--- a/src/wp-includes/block-template-utils.php
+++ b/src/wp-includes/block-template-utils.php
@@ -344,11 +344,8 @@ function _get_block_template_file( $template_type, $slug ) {
return _add_block_template_part_area_info( $new_template_item );
}
- if ( 'wp_template' === $template_type ) {
- return _add_block_template_info( $new_template_item );
- }
-
- return $new_template_item;
+ // If it's not a `wp_template_part`, it must be a `wp_template`.
+ return _add_block_template_info( $new_template_item );
}
}
@@ -440,7 +437,7 @@ function _get_block_templates_files( $template_type, $query = array() ) {
if ( 'wp_template_part' === $template_type ) {
$candidate = _add_block_template_part_area_info( $new_template_item );
- if ( ! isset( $area ) || ( isset( $area ) && $area === $candidate['area'] ) ) {
+ if ( ! isset( $area ) || $area === $candidate['area'] ) {
$template_files[ $template_slug ] = $candidate;
}
}
diff --git a/src/wp-includes/block-template.php b/src/wp-includes/block-template.php
index affae1c09a..eecbe2d61d 100644
--- a/src/wp-includes/block-template.php
+++ b/src/wp-includes/block-template.php
@@ -253,7 +253,7 @@ function get_the_block_template_html() {
if ( is_user_logged_in() ) {
return '<h1>' . esc_html__( 'No matching template found' ) . '</h1>';
}
- return;
+ return '';
}
$content = $wp_embed->run_shortcode( $_wp_current_template_content );
diff --git a/src/wp-includes/blocks.php b/src/wp-includes/blocks.php
index 838cd84a19..56410779fe 100644
--- a/src/wp-includes/blocks.php
+++ b/src/wp-includes/blocks.php
@@ -328,8 +328,9 @@ function register_block_style_handle( $metadata, $field_name, $index = 0 ) {
$style_path_norm = wp_normalize_path( realpath( dirname( $metadata['file'] ) . '/' . $style_path ) );
$style_uri = get_block_asset_url( $style_path_norm );
- $version = ! $is_core_block && isset( $metadata['version'] ) ? $metadata['version'] : false;
- $result = wp_register_style(
+ $block_version = ! $is_core_block && isset( $metadata['version'] ) ? $metadata['version'] : false;
+ $version = $style_path_norm && defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? filemtime( $style_path_norm ) : $block_version;
+ $result = wp_register_style(
$style_handle_name,
$style_uri,
array(),
@@ -2403,11 +2404,32 @@ function parse_blocks( $content ) {
* @return string Updated post content.
*/
function do_blocks( $content ) {
- $blocks = parse_blocks( $content );
- $output = '';
+ $blocks = parse_blocks( $content );
+ $top_level_block_count = count( $blocks );
+ $output = '';
- foreach ( $blocks as $block ) {
- $output .= render_block( $block );
+ /**
+ * Parsed blocks consist of a list of top-level blocks. Those top-level
+ * blocks may themselves contain nested inner blocks. However, every
+ * top-level block is rendered independently, meaning there are no data
+ * dependencies between them.
+ *
+ * Ideally, therefore, the parser would only need to parse one complete
+ * top-level block at a time, render it, and move on. Unfortunately, this
+ * is not possible with {@see \parse_blocks()} because it must parse the
+ * entire given document at once.
+ *
+ * While the current implementation prevents this optimization, it’s still
+ * possible to reduce the peak memory use when calls to `render_block()`
+ * on those top-level blocks are memory-heavy (which many of them are).
+ * By setting each parsed block to `NULL` after rendering it, any memory
+ * allocated during the render will be freed and reused for the next block.
+ * Before making this change, that memory was retained and would lead to
+ * out-of-memory crashes for certain posts that now run with this change.
+ */
+ for ( $i = 0; $i < $top_level_block_count; $i++ ) {
+ $output .= render_block( $blocks[ $i ] );
+ $blocks[ $i ] = null;
}
// If there are blocks in this content, we shouldn't run wpautop() on it later.
diff --git a/src/wp-includes/capabilities.php b/src/wp-includes/capabilities.php
index d6c340c95e..2464ef5a79 100644
--- a/src/wp-includes/capabilities.php
+++ b/src/wp-includes/capabilities.php
@@ -470,7 +470,7 @@ function map_meta_cap( $cap, $user_id, ...$args ) {
if ( $meta_key ) {
$allowed = ! is_protected_meta( $meta_key, $object_type );
- if ( ! empty( $object_subtype ) && has_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
+ if ( has_filter( "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}" ) ) {
/**
* Filters whether the user is allowed to edit a specific meta key of a specific object type and subtype.
@@ -512,36 +512,33 @@ function map_meta_cap( $cap, $user_id, ...$args ) {
$allowed = apply_filters( "auth_{$object_type}_meta_{$meta_key}", $allowed, $meta_key, $object_id, $user_id, $cap, $caps );
}
- if ( ! empty( $object_subtype ) ) {
-
- /**
- * Filters whether the user is allowed to edit meta for specific object types/subtypes.
- *
- * Return true to have the mapped meta caps from `edit_{$object_type}` apply.
- *
- * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
- * The dynamic portion of the hook name, `$object_subtype` refers to the object subtype being filtered.
- * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
- *
- * @since 4.6.0 As `auth_post_{$post_type}_meta_{$meta_key}`.
- * @since 4.7.0 Renamed from `auth_post_{$post_type}_meta_{$meta_key}` to
- * `auth_{$object_type}_{$object_subtype}_meta_{$meta_key}`.
- * @deprecated 4.9.8 Use {@see 'auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}'} instead.
- *
- * @param bool $allowed Whether the user can add the object meta. Default false.
- * @param string $meta_key The meta key.
- * @param int $object_id Object ID.
- * @param int $user_id User ID.
- * @param string $cap Capability name.
- * @param string[] $caps Array of the user's capabilities.
- */
- $allowed = apply_filters_deprecated(
- "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}",
- array( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ),
- '4.9.8',
- "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}"
- );
- }
+ /**
+ * Filters whether the user is allowed to edit meta for specific object types/subtypes.
+ *
+ * Return true to have the mapped meta caps from `edit_{$object_type}` apply.
+ *
+ * The dynamic portion of the hook name, `$object_type` refers to the object type being filtered.
+ * The dynamic portion of the hook name, `$object_subtype` refers to the object subtype being filtered.
+ * The dynamic portion of the hook name, `$meta_key`, refers to the meta key passed to map_meta_cap().
+ *
+ * @since 4.6.0 As `auth_post_{$post_type}_meta_{$meta_key}`.
+ * @since 4.7.0 Renamed from `auth_post_{$post_type}_meta_{$meta_key}` to
+ * `auth_{$object_type}_{$object_subtype}_meta_{$meta_key}`.
+ * @deprecated 4.9.8 Use {@see 'auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}'} instead.
+ *
+ * @param bool $allowed Whether the user can add the object meta. Default false.
+ * @param string $meta_key The meta key.
+ * @param int $object_id Object ID.
+ * @param int $user_id User ID.
+ * @param string $cap Capability name.
+ * @param string[] $caps Array of the user's capabilities.
+ */
+ $allowed = apply_filters_deprecated(
+ "auth_{$object_type}_{$object_subtype}_meta_{$meta_key}",
+ array( $allowed, $meta_key, $object_id, $user_id, $cap, $caps ),
+ '4.9.8',
+ "auth_{$object_type}_meta_{$meta_key}_for_{$object_subtype}"
+ );
if ( ! $allowed ) {
$caps[] = $cap;
@@ -1099,12 +1096,34 @@ function get_role( $role ) {
/**
* Adds a role, if it does not exist.
*
+ * The list of capabilities can be passed either as a numerically indexed array of capability names, or an
+ * associative array of boolean values keyed by the capability name. To explicitly deny the role a capability, set
+ * the value for that capability to false.
+ *
+ * Examples:
+ *
+ * // Add a role that can edit posts.
+ * add_role( 'custom_role', 'Custom Role', array(
+ * 'read',
+ * 'edit_posts',
+ * ) );
+ *
+ * Or, using an associative array:
+ *
+ * // Add a role that can edit posts but explicitly cannot not delete them.
+ * add_role( 'custom_role', 'Custom Role', array(
+ * 'read' => true,
+ * 'edit_posts' => true,
+ * 'delete_posts' => false,
+ * ) );
+ *
* @since 2.0.0
+ * @since x.y.z Support was added for a numerically indexed array of strings for the capabilities array.
*
- * @param string $role Role name.
- * @param string $display_name Display name for role.
- * @param bool[] $capabilities List of capabilities keyed by the capability name,
- * e.g. array( 'edit_posts' => true, 'delete_posts' => false ).
+ * @param string $role Role name.
+ * @param string $display_name Display name for role.
+ * @param array<string,bool>|array<int,string> $capabilities Capabilities to be added to the role.
+ * Default empty array.
* @return WP_Role|void WP_Role object, if the role is added.
*/
function add_role( $role, $display_name, $capabilities = array() ) {
diff --git a/src/wp-includes/category-template.php b/src/wp-includes/category-template.php
index 0525ae792a..b2c88c9c25 100644
--- a/src/wp-includes/category-template.php
+++ b/src/wp-includes/category-template.php
@@ -71,7 +71,7 @@ function get_category_parents( $category_id, $link = false, $separator = '/', $n
*
* @since 0.71
*
- * @param int $post_id Optional. The post ID. Defaults to current post ID.
+ * @param int|false $post_id Optional. The post ID. Defaults to current post ID.
* @return WP_Term[] Array of WP_Term objects, one for each category assigned to the post.
*/
function get_the_category( $post_id = false ) {
@@ -131,11 +131,11 @@ function get_the_category_by_ID( $cat_id ) { // phpcs:ignore WordPress.NamingCon
*
* @global WP_Rewrite $wp_rewrite WordPress rewrite component.
*
- * @param string $separator Optional. Separator between the categories. By default, the links are placed
- * in an unordered list. An empty string will result in the default behavior.
- * @param string $parents Optional. How to display the parents. Accepts 'multiple', 'single', or empty.
- * Default empty string.
- * @param int $post_id Optional. ID of the post to retrieve categories for. Defaults to the current post.
+ * @param string $separator Optional. Separator between the categories. By default, the links are placed
+ * in an unordered list. An empty string will result in the default behavior.
+ * @param string $parents Optional. How to display the parents. Accepts 'multiple', 'single', or empty.
+ * Default empty string.
+ * @param int|false $post_id Optional. ID of the post to retrieve categories for. Defaults to the current post.
* @return string Category list for a post.
*/
function get_the_category_list( $separator = '', $parents = '', $post_id = false ) {
@@ -251,7 +251,7 @@ function get_the_category_list( $separator = '', $parents = '', $post_id = false
*
* @param int|string|int[]|string[] $category Category ID, name, slug, or array of such
* to check against.
- * @param int|WP_Post $post Optional. Post to check. Defaults to the current post.
+ * @param int|null|WP_Post $post Optional. Post to check. Defaults to the current post.
* @return bool True if the current post is in any of the given categories.
*/
function in_category( $category, $post = null ) {
@@ -267,11 +267,11 @@ function in_category( $category, $post = null ) {
*
* @since 0.71
*
- * @param string $separator Optional. Separator between the categories. By default, the links are placed
- * in an unordered list. An empty string will result in the default behavior.
- * @param string $parents Optional. How to display the parents. Accepts 'multiple', 'single', or empty.
- * Default empty string.
- * @param int $post_id Optional. ID of the post to retrieve categories for. Defaults to the current post.
+ * @param string $separator Optional. Separator between the categories. By default, the links are placed
+ * in an unordered list. An empty string will result in the default behavior.
+ * @param string $parents Optional. How to display the parents. Accepts 'multiple', 'single', or empty.
+ * Default empty string.
+ * @param int|false $post_id Optional. ID of the post to retrieve categories for. Defaults to the current post.
*/
function the_category( $separator = '', $parents = '', $post_id = false ) {
echo get_the_category_list( $separator, $parents, $post_id );
@@ -793,7 +793,7 @@ function wp_tag_cloud( $args = '' ) {
* @return int Scaled count.
*/
function default_topic_count_scale( $count ) {
- return round( log10( $count + 1 ) * 100 );
+ return (int) round( log10( $count + 1 ) * 100 );
}
/**
diff --git a/src/wp-includes/certificates/ca-bundle.crt b/src/wp-includes/certificates/ca-bundle.crt
index 46fe2085ca..ba90f7a2d8 100644
--- a/src/wp-includes/certificates/ca-bundle.crt
+++ b/src/wp-includes/certificates/ca-bundle.crt
@@ -61,14 +61,14 @@ D/xwzoiQ
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Feb 25 04:12:03 2025 GMT
+## Certificate data from Mozilla as of: Tue May 20 03:12:02 2025 GMT
##
## Find updated versions here: https://curl.se/docs/caextract.html
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt). This file can be found in the mozilla source tree:
-## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
+## https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/release/security/nss/lib/ckfw/builtins/certdata.txt
##
## It contains the certificates in PEM format and therefore
## can be directly used with curl / libcurl / php_curl, or with
@@ -76,76 +76,10 @@ D/xwzoiQ
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.29.
-## SHA256: 620fd89c02acb0019f1899dab7907db5d20735904f5a9a0d3a8771a5857ac482
+## SHA256: 8944ec6b572b577daee4fc681a425881f841ec2660e4cb5f0eee727f84620697
##
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
-KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
-T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
-J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
-nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
Entrust Root Certification Authority
====================================
-----BEGIN CERTIFICATE-----
@@ -172,30 +106,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
-----END CERTIFICATE-----
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
QuoVadis Root CA 2
==================
-----BEGIN CERTIFICATE-----
@@ -262,78 +172,6 @@ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
-----END CERTIFICATE-----
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
DigiCert Assured ID Root CA
===========================
-----BEGIN CERTIFICATE-----
diff --git a/src/wp-includes/certificates/cacert.pem b/src/wp-includes/certificates/cacert.pem
index 584af3c0b4..4acd8e5365 100644
--- a/src/wp-includes/certificates/cacert.pem
+++ b/src/wp-includes/certificates/cacert.pem
@@ -1,14 +1,14 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Tue Feb 25 04:12:03 2025 GMT
+## Certificate data from Mozilla as of: Tue May 20 03:12:02 2025 GMT
##
## Find updated versions here: https://curl.se/docs/caextract.html
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
## file (certdata.txt). This file can be found in the mozilla source tree:
-## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
+## https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/release/security/nss/lib/ckfw/builtins/certdata.txt
##
## It contains the certificates in PEM format and therefore
## can be directly used with curl / libcurl / php_curl, or with
@@ -16,76 +16,10 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.29.
-## SHA256: 620fd89c02acb0019f1899dab7907db5d20735904f5a9a0d3a8771a5857ac482
+## SHA256: 8944ec6b572b577daee4fc681a425881f841ec2660e4cb5f0eee727f84620697
##
-GlobalSign Root CA
-==================
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
-GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
-b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
-BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
-VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
-DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
-THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
-Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
-c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
-gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
-AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
-Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
-j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
-hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
-X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
-
-Entrust.net Premium 2048 Secure Server CA
-=========================================
------BEGIN CERTIFICATE-----
-MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
-ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
-bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
-NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
-d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
-ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
-Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
-hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
-nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
-VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
-BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
-KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
-T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
-zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
-J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
-nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
------END CERTIFICATE-----
-
-Baltimore CyberTrust Root
-=========================
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
-ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
-ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
-SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
-dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
-uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
-UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
-G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
-XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
-l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
-VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
-BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
-cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
-hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
-Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
-RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
-
Entrust Root Certification Authority
====================================
-----BEGIN CERTIFICATE-----
@@ -112,30 +46,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
-----END CERTIFICATE-----
-Comodo AAA Services root
-========================
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
-R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
-TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
-MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
-c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
-BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
-ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
-C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
-i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
-Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
-Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
-Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
-BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
-cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
-LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
-7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
-8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
-12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
-
QuoVadis Root CA 2
==================
-----BEGIN CERTIFICATE-----
@@ -202,78 +112,6 @@ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
-----END CERTIFICATE-----
-XRamp Global CA Root
-====================
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
-BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
-dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
-HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
-U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
-IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
-foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
-zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
-AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
-xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
-EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
-oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
-AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
-/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
-nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
-8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
-
-Go Daddy Class 2 CA
-===================
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
-VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
-A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
-ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
-qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
-YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
-vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
-BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
-atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
-MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
-PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
-I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
-Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
-vZ8=
------END CERTIFICATE-----
-
-Starfield Class 2 CA
-====================
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
-U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
-MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
-A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
-SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
-bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
-JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
-epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
-F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
-MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
-hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
-bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
-afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
-PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
-KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
-QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
-
DigiCert Assured ID Root CA
===========================
-----BEGIN CERTIFICATE-----
diff --git a/src/wp-includes/class-wp-block-list.php b/src/wp-includes/class-wp-block-list.php
index e1151e6745..81f01eb0ca 100644
--- a/src/wp-includes/class-wp-block-list.php
+++ b/src/wp-includes/class-wp-block-list.php
@@ -19,7 +19,6 @@ class WP_Block_List implements Iterator, ArrayAccess, Countable {
*
* @since 5.5.0
* @var array[]|WP_Block[]
- * @access protected
*/
protected $blocks;
@@ -28,7 +27,6 @@ class WP_Block_List implements Iterator, ArrayAccess, Countable {
*
* @since 5.5.0
* @var array
- * @access protected
*/
protected $available_context;
@@ -37,7 +35,6 @@ class WP_Block_List implements Iterator, ArrayAccess, Countable {
*
* @since 5.5.0
* @var WP_Block_Type_Registry
- * @access protected
*/
protected $registry;
diff --git a/src/wp-includes/class-wp-block-pattern-categories-registry.php b/src/wp-includes/class-wp-block-pattern-categories-registry.php
index 3d37a5940a..2d5fbcf2fe 100644
--- a/src/wp-includes/class-wp-block-pattern-categories-registry.php
+++ b/src/wp-includes/class-wp-block-pattern-categories-registry.php
@@ -107,7 +107,7 @@ final class WP_Block_Pattern_Categories_Registry {
* @since 5.5.0
*
* @param string $category_name Pattern category name including namespace.
- * @return array Registered pattern properties.
+ * @return array|null Registered pattern properties, or `null` if the pattern category is not registered.
*/
public function get_registered( $category_name ) {
if ( ! $this->is_registered( $category_name ) ) {
diff --git a/src/wp-includes/class-wp-block-patterns-registry.php b/src/wp-includes/class-wp-block-patterns-registry.php
index 3b5f053bfd..2afa8a853f 100644
--- a/src/wp-includes/class-wp-block-patterns-registry.php
+++ b/src/wp-includes/class-wp-block-patterns-registry.php
@@ -188,7 +188,7 @@ final class WP_Block_Patterns_Registry {
* @since 5.5.0
*
* @param string $pattern_name Block pattern name including namespace.
- * @return array Registered pattern properties.
+ * @return array|null Registered pattern properties or `null` if the pattern is not registered.
*/
public function get_registered( $pattern_name ) {
if ( ! $this->is_registered( $pattern_name ) ) {
diff --git a/src/wp-includes/class-wp-block-styles-registry.php b/src/wp-includes/class-wp-block-styles-registry.php
index 9a990173b4..8fb5e2eb23 100644
--- a/src/wp-includes/class-wp-block-styles-registry.php
+++ b/src/wp-includes/class-wp-block-styles-registry.php
@@ -140,7 +140,7 @@ final class WP_Block_Styles_Registry {
*
* @param string $block_name Block type name including namespace.
* @param string $block_style_name Block style name.
- * @return array Registered block style properties.
+ * @return array|null Registered block style properties or `null` if the block style is not registered.
*/
public function get_registered( $block_name, $block_style_name ) {
if ( ! $this->is_registered( $block_name, $block_style_name ) ) {
diff --git a/src/wp-includes/class-wp-block.php b/src/wp-includes/class-wp-block.php
index d8fb177ebb..e3b97f6501 100644
--- a/src/wp-includes/class-wp-block.php
+++ b/src/wp-includes/class-wp-block.php
@@ -54,7 +54,6 @@ class WP_Block {
*
* @since 5.5.0
* @var array
- * @access protected
*/
protected $available_context = array();
@@ -63,7 +62,6 @@ class WP_Block {
*
* @since 5.9.0
* @var WP_Block_Type_Registry
- * @access protected
*/
protected $registry;
diff --git a/src/wp-includes/class-wp-classic-to-block-menu-converter.php b/src/wp-includes/class-wp-classic-to-block-menu-converter.php
index 6430aab6fa..b3cc819904 100644
--- a/src/wp-includes/class-wp-classic-to-block-menu-converter.php
+++ b/src/wp-includes/class-wp-classic-to-block-menu-converter.php
@@ -10,7 +10,6 @@
* Converts a Classic Menu to Block Menu blocks.
*
* @since 6.3.0
- * @access public
*/
class WP_Classic_To_Block_Menu_Converter {
diff --git a/src/wp-includes/class-wp-comment-query.php b/src/wp-includes/class-wp-comment-query.php
index 6a72c0d209..03d3479b6c 100644
--- a/src/wp-includes/class-wp-comment-query.php
+++ b/src/wp-includes/class-wp-comment-query.php
@@ -579,9 +579,7 @@ class WP_Comment_Query {
}
}
- if ( ! empty( $status_clauses ) ) {
- $approved_clauses[] = '( ' . implode( ' OR ', $status_clauses ) . ' )';
- }
+ $approved_clauses[] = '( ' . implode( ' OR ', $status_clauses ) . ' )';
}
// User IDs or emails whose unapproved comments are included, regardless of $status.
diff --git a/src/wp-includes/class-wp-customize-widgets.php b/src/wp-includes/class-wp-customize-widgets.php
index 3db46ad088..b24a9c8b47 100644
--- a/src/wp-includes/class-wp-customize-widgets.php
+++ b/src/wp-includes/class-wp-customize-widgets.php
@@ -921,10 +921,12 @@ final class WP_Customize_Widgets {
</button>
<h3>
<span class="customize-action">
- <?php
+ <?php
+ $panel = $this->manager->get_panel( 'widgets' );
+ $panel_title = isset( $panel->title ) ? $panel->title : __( 'Widgets' );
/* translators: &#9656; is the unicode right-pointing triangle. %s: Section title in the Customizer. */
- printf( __( 'Customizing &#9656; %s' ), esc_html( $this->manager->get_panel( 'widgets' )->title ) );
- ?>
+ printf( __( 'Customizing &#9656; %s' ), esc_html( $panel_title ) );
+ ?>
</span>
<?php _e( 'Add a Widget' ); ?>
</h3>
diff --git a/src/wp-includes/class-wp-image-editor-imagick.php b/src/wp-includes/class-wp-image-editor-imagick.php
index 66085ac503..f57e6f281f 100644
--- a/src/wp-includes/class-wp-image-editor-imagick.php
+++ b/src/wp-includes/class-wp-image-editor-imagick.php
@@ -305,7 +305,7 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
* image operations within the time of the HTTP request.
*
* @since 6.2.0
- * @since 6.3.0 This method was deprecated.
+ * @deprecated 6.3.0 No longer used in core.
*
* @return int|null The new limit on success, null on failure.
*/
@@ -484,37 +484,28 @@ class WP_Image_Editor_Imagick extends WP_Image_Editor {
$this->image->setOption( 'png:compression-filter', '5' );
$this->image->setOption( 'png:compression-level', '9' );
$this->image->setOption( 'png:compression-strategy', '1' );
- // Check to see if a PNG is indexed, and find the pixel depth.
- if ( is_callable( array( $this->image, 'getImageDepth' ) ) ) {
- $indexed_pixel_depth = $this->image->getImageDepth();
-
- // Indexed PNG files get some additional handling.
- if ( 0 < $indexed_pixel_depth && 8 >= $indexed_pixel_depth ) {
- // Check for an alpha channel.
- if (
- is_callable( array( $this->image, 'getImageAlphaChannel' ) )
- && $this->image->getImageAlphaChannel()
- ) {
- $this->image->setOption( 'png:include-chunk', 'tRNS' );
- } else {
- $this->image->setOption( 'png:exclude-chunk', 'all' );
- }
-
- // Reduce colors in the images to maximum needed, using the global colorspace.
- $max_colors = pow( 2, $indexed_pixel_depth );
- if ( is_callable( array( $this->image, 'getImageColors' ) ) ) {
- $current_colors = $this->image->getImageColors();
- $max_colors = min( $max_colors, $current_colors );
- }
- $this->image->quantizeImage( $max_colors, $this->image->getColorspace(), 0, false, false );
-
- /**
- * If the colorspace is 'gray', use the png8 format to ensure it stays indexed.
- */
- if ( Imagick::COLORSPACE_GRAY === $this->image->getImageColorspace() ) {
- $this->image->setOption( 'png:format', 'png8' );
- }
+
+ // Indexed PNG files get some additional handling.
+ // See #63448 for details.
+ if (
+ is_callable( array( $this->image, 'getImageProperty' ) )
+ && '3' === $this->image->getImageProperty( 'png:IHDR.color-type-orig' )
+ ) {
+
+ // Check for an alpha channel.
+ if (
+ is_callable( array( $this->image, 'getImageAlphaChannel' ) )
+ && $this->image->getImageAlphaChannel()
+ ) {
+ $this->image->setOption( 'png:include-chunk', 'tRNS' );
+ } else {
+ $this->image->setOption( 'png:exclude-chunk', 'all' );
}
+ // Set the image format to Indexed PNG.
+ $this->image->setOption( 'png:format', 'png8' );
+
+ } else {
+ $this->image->setOption( 'png:exclude-chunk', 'all' );
}
}
diff --git a/src/wp-includes/class-wp-locale-switcher.php b/src/wp-includes/class-wp-locale-switcher.php
index db4ae298c6..55edef3c9c 100644
--- a/src/wp-includes/class-wp-locale-switcher.php
+++ b/src/wp-includes/class-wp-locale-switcher.php
@@ -287,7 +287,7 @@ class WP_Locale_Switcher {
WP_Translation_Controller::get_instance()->set_locale( $locale );
if ( $phpmailer instanceof WP_PHPMailer ) {
- $phpmailer->SetLanguage();
+ $phpmailer->setLanguage();
}
/**
diff --git a/src/wp-includes/class-wp-navigation-fallback.php b/src/wp-includes/class-wp-navigation-fallback.php
index 59fe023d80..573ab27f34 100644
--- a/src/wp-includes/class-wp-navigation-fallback.php
+++ b/src/wp-includes/class-wp-navigation-fallback.php
@@ -12,7 +12,6 @@
/**
* Manages fallback behavior for Navigation menus.
*
- * @access public
* @since 6.3.0
*/
class WP_Navigation_Fallback {
diff --git a/src/wp-includes/class-wp-oembed.php b/src/wp-includes/class-wp-oembed.php
index 2d59c2217d..8d153c8fa0 100644
--- a/src/wp-includes/class-wp-oembed.php
+++ b/src/wp-includes/class-wp-oembed.php
@@ -89,7 +89,6 @@ class WP_oEmbed {
'#https?://videopress\.com/v/.*#' => array( 'https://public-api.wordpress.com/oembed/?for=' . $host, true ),
'#https?://(www\.)?reddit\.com/r/[^/]+/comments/.*#i' => array( 'https://www.reddit.com/oembed', true ),
'#https?://(www\.)?speakerdeck\.com/.*#i' => array( 'https://speakerdeck.com/oembed.{format}', true ),
- '#https?://(www\.)?screencast\.com/.*#i' => array( 'https://api.screencast.com/external/oembed', true ),
'#https?://([a-z0-9-]+\.)?amazon\.(com|com\.mx|com\.br|ca)/.*#i' => array( 'https://read.amazon.com/kp/api/oembed', true ),
'#https?://([a-z0-9-]+\.)?amazon\.(co\.uk|de|fr|it|es|in|nl|ru)/.*#i' => array( 'https://read.amazon.co.uk/kp/api/oembed', true ),
'#https?://([a-z0-9-]+\.)?amazon\.(co\.jp|com\.au)/.*#i' => array( 'https://read.amazon.com.au/kp/api/oembed', true ),
@@ -216,6 +215,7 @@ class WP_oEmbed {
* | Meetup.com | meetup.com | 3.9.0 | 6.0.1 |
* | Meetup.com | meetu.ps | 3.9.0 | 6.0.1 |
* | SlideShare | slideshare.net | 3.5.0 | 6.6.0 |
+ * | Screencast | screencast.com | 4.8.0 | 6.8.2 |
*
* @see wp_oembed_add_provider()
*
@@ -739,9 +739,9 @@ class WP_oEmbed {
*
* @since 2.9.0
*
- * @param string $return The returned oEmbed HTML.
- * @param object $data A data object result from an oEmbed provider.
- * @param string $url The URL of the content to be embedded.
+ * @param string|false $return The returned oEmbed HTML, or false on failure.
+ * @param object $data A data object result from an oEmbed provider.
+ * @param string $url The URL of the content to be embedded.
*/
return apply_filters( 'oembed_dataparse', $return, $data, $url );
}
@@ -752,10 +752,10 @@ class WP_oEmbed {
* @since 2.9.0 as strip_scribd_newlines()
* @since 3.0.0
*
- * @param string $html Existing HTML.
- * @param object $data Data object from WP_oEmbed::data2html()
- * @param string $url The original URL passed to oEmbed.
- * @return string Possibly modified $html
+ * @param string|false $html Existing HTML.
+ * @param object $data Data object from WP_oEmbed::data2html()
+ * @param string $url The original URL passed to oEmbed.
+ * @return string|false Possibly modified $html.
*/
public function _strip_newlines( $html, $data, $url ) {
if ( ! str_contains( $html, "\n" ) ) {
diff --git a/src/wp-includes/class-wp-phpmailer.php b/src/wp-includes/class-wp-phpmailer.php
index b3c976d13d..ce71eec458 100644
--- a/src/wp-includes/class-wp-phpmailer.php
+++ b/src/wp-includes/class-wp-phpmailer.php
@@ -24,7 +24,7 @@ class WP_PHPMailer extends PHPMailer\PHPMailer\PHPMailer {
*/
public function __construct( $exceptions = false ) {
parent::__construct( $exceptions );
- $this->SetLanguage();
+ $this->setLanguage();
}
/**
@@ -32,10 +32,12 @@ class WP_PHPMailer extends PHPMailer\PHPMailer\PHPMailer {
*
* @since 6.8.0
*
+ * @param string $langcode Optional. Unused. ISO 639-1 2-character language code. Default 'en'.
+ * @param string $lang_path Optional. Unused. Path to the language file directory. Default empty string.
* @return true Always returns true.
*/
- public function SetLanguage( $langcode = 'en', $lang_path = '' ) {
- $error_strings = array(
+ public function setLanguage( $langcode = 'en', $lang_path = '' ) {
+ $this->language = array(
'authenticate' => __( 'SMTP Error: Could not authenticate.' ),
'buggy_php' => sprintf(
/* translators: 1: mail.add_x_header. 2: php.ini */
@@ -65,7 +67,7 @@ class WP_PHPMailer extends PHPMailer\PHPMailer\PHPMailer {
'invalid_address' => __( 'Invalid address: ' ),
'invalid_header' => __( 'Invalid header name or value' ),
/* translators: There is a space after the colon. */
- 'invalid_hostentry' => __( 'Invalid hostentry: ' ),
+ 'invalid_hostentry' => __( 'Invalid host entry: ' ),
/* translators: There is a space after the colon. */
'invalid_host' => __( 'Invalid host: ' ),
/* translators: There is a space at the beginning. */
@@ -87,7 +89,7 @@ class WP_PHPMailer extends PHPMailer\PHPMailer\PHPMailer {
/* translators: There is a space after the colon. */
'variable_set' => __( 'Cannot set or reset variable: ' ),
);
- $this->language = $error_strings;
+
return true;
}
}
diff --git a/src/wp-includes/class-wp-roles.php b/src/wp-includes/class-wp-roles.php
index 95e08e6dc7..0b94e0f959 100644
--- a/src/wp-includes/class-wp-roles.php
+++ b/src/wp-includes/class-wp-roles.php
@@ -143,16 +143,34 @@ class WP_Roles {
*
* Updates the list of roles, if the role doesn't already exist.
*
- * The capabilities are defined in the following format: `array( 'read' => true )`.
- * To explicitly deny the role a capability, set the value for that capability to false.
+ * The list of capabilities can be passed either as a numerically indexed array of capability names, or an
+ * associative array of boolean values keyed by the capability name. To explicitly deny the role a capability, set
+ * the value for that capability to false.
+ *
+ * Examples:
+ *
+ * // Add a role that can edit posts.
+ * wp_roles()->add_role( 'custom_role', 'Custom Role', array(
+ * 'read',
+ * 'edit_posts',
+ * ) );
+ *
+ * Or, using an associative array:
+ *
+ * // Add a role that can edit posts but explicitly cannot not delete them.
+ * wp_roles()->add_role( 'custom_role', 'Custom Role', array(
+ * 'read' => true,
+ * 'edit_posts' => true,
+ * 'delete_posts' => false,
+ * ) );
*
* @since 2.0.0
+ * @since x.y.z Support was added for a numerically indexed array of strings for the capabilities array.
*
- * @param string $role Role name.
- * @param string $display_name Role display name.
- * @param bool[] $capabilities Optional. List of capabilities keyed by the capability name,
- * e.g. `array( 'edit_posts' => true, 'delete_posts' => false )`.
- * Default empty array.
+ * @param string $role Role name.
+ * @param string $display_name Role display name.
+ * @param array<string,bool>|array<int,string> $capabilities Capabilities to be added to the role.
+ * Default empty array.
* @return WP_Role|void WP_Role object, if the role is added.
*/
public function add_role( $role, $display_name, $capabilities = array() ) {
@@ -160,6 +178,10 @@ class WP_Roles {
return;
}
+ if ( wp_is_numeric_array( $capabilities ) ) {
+ $capabilities = array_fill_keys( $capabilities, true );
+ }
+
$this->roles[ $role ] = array(
'name' => $display_name,
'capabilities' => $capabilities,
diff --git a/src/wp-includes/class-wp-site.php b/src/wp-includes/class-wp-site.php
index fcd07cd5e3..715585316c 100644
--- a/src/wp-includes/class-wp-site.php
+++ b/src/wp-includes/class-wp-site.php
@@ -126,7 +126,7 @@ final class WP_Site {
public $spam = '0';
/**
- * Whether the site should be treated as deleted.
+ * Whether the site should be treated as flagged for deletion.
*
* A numeric string, for compatibility reasons.
*
diff --git a/src/wp-includes/class-wp-tax-query.php b/src/wp-includes/class-wp-tax-query.php
index 5a489f5662..c6ec3258cc 100644
--- a/src/wp-includes/class-wp-tax-query.php
+++ b/src/wp-includes/class-wp-tax-query.php
@@ -44,7 +44,7 @@ class WP_Tax_Query {
* Standard response when the query should not return any rows.
*
* @since 3.2.0
- * @var string
+ * @var array<string, array<string>>
*/
private static $no_results = array(
'join' => array( '' ),
diff --git a/src/wp-includes/class-wp-xmlrpc-server.php b/src/wp-includes/class-wp-xmlrpc-server.php
index 665fc72b0c..3b50d393de 100644
--- a/src/wp-includes/class-wp-xmlrpc-server.php
+++ b/src/wp-includes/class-wp-xmlrpc-server.php
@@ -5152,7 +5152,7 @@ class wp_xmlrpc_server extends IXR_Server {
$post_content = xmlrpc_removepostdata( $content );
$post_date = current_time( 'mysql' );
- $post_date_gmt = current_time( 'mysql', 1 );
+ $post_date_gmt = current_time( 'mysql', true );
$post_data = compact(
'post_author',
diff --git a/src/wp-includes/class-wpdb.php b/src/wp-includes/class-wpdb.php
index c6e6099c26..1aec294317 100644
--- a/src/wp-includes/class-wpdb.php
+++ b/src/wp-includes/class-wpdb.php
@@ -43,7 +43,7 @@ define( 'ARRAY_N', 'ARRAY_N' );
* By default, WordPress uses this class to instantiate the global $wpdb object, providing
* access to the WordPress database.
*
- * It is possible to replace this class with your own by setting the $wpdb global variable
+ * It is possible to replace the global instance with your own by setting the $wpdb global variable
* in wp-content/db.php file to your class. The wpdb class will still be included, so you can
* extend it or simply use your own.
*
@@ -237,7 +237,6 @@ class wpdb {
* WordPress table prefix.
*
* You can set this to have multiple WordPress installations in a single database.
- * The second reason is for possible security precautions.
*
* @since 2.5.0
*
@@ -941,7 +940,7 @@ class wpdb {
/**
* Changes the current SQL mode, and ensures its WordPress compatibility.
*
- * If no modes are passed, it will ensure the current MySQL server modes are compatible.
+ * If no modes are passed, it will ensure the current SQL server modes are compatible.
*
* @since 3.9.0
*
@@ -1369,7 +1368,7 @@ class wpdb {
}
/**
- * Quotes an identifier for a MySQL database, e.g. table/field names.
+ * Quotes an identifier such as a table or field name.
*
* @since 6.2.0
*
@@ -1435,6 +1434,13 @@ class wpdb {
* 'foo'
* );
*
+ * $wpdb->prepare(
+ * "SELECT * FROM %i WHERE %i = %s",
+ * $table,
+ * $field,
+ * $value
+ * );
+ *
* @since 2.3.0
* @since 5.3.0 Formalized the existing and already documented `...$args` parameter
* by updating the function signature. The second parameter was changed
@@ -1957,7 +1963,7 @@ class wpdb {
$client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
/*
- * Set the MySQLi error reporting off because WordPress handles its own.
+ * Switch error reporting off because WordPress handles its own.
* This is due to the default value change from `MYSQLI_REPORT_OFF`
* to `MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT` in PHP 8.1.
*/
@@ -2100,7 +2106,7 @@ class wpdb {
}
$host = ! empty( $matches['host'] ) ? $matches['host'] : '';
- // MySQLi port cannot be a string; must be null or an integer.
+ // Port cannot be a string; must be null or an integer.
$port = ! empty( $matches['port'] ) ? absint( $matches['port'] ) : null;
return array( $host, $port, $socket, $is_ipv6 );
@@ -2290,7 +2296,7 @@ class wpdb {
if ( $this->dbh instanceof mysqli ) {
$this->last_error = mysqli_error( $this->dbh );
} else {
- $this->last_error = __( 'Unable to retrieve the error message from MySQL' );
+ $this->last_error = __( 'Unable to retrieve the error message from the database server' );
}
if ( $this->last_error ) {
@@ -2866,8 +2872,12 @@ class wpdb {
* @return array {
* Array of values and formats keyed by their field names.
*
- * @type mixed $value The value to be formatted.
- * @type string $format The format to be mapped to the value.
+ * @type array ...$0 {
+ * Value and format for this field.
+ *
+ * @type mixed $value The value to be formatted.
+ * @type string $format The format to be mapped to the value.
+ * }
* }
*/
protected function process_field_formats( $data, $format ) {
@@ -3469,7 +3479,7 @@ class wpdb {
}
/**
- * Checks if the query is accessing a collation considered safe on the current version of MySQL.
+ * Checks if the query is accessing a collation considered safe.
*
* @since 4.2.0
*
@@ -3983,11 +3993,11 @@ class wpdb {
}
/**
- * Determines whether MySQL database is at least the required minimum version.
+ * Determines whether the database server is at least the required minimum version.
*
* @since 2.5.0
*
- * @global string $required_mysql_version The required MySQL version string.
+ * @global string $required_mysql_version The minimum required MySQL version string.
* @return void|WP_Error
*/
public function check_database_version() {
@@ -4043,7 +4053,7 @@ class wpdb {
*
* Capability sniffs for the database server and current version of WPDB.
*
- * Database sniffs are based on the version of MySQL the site is using.
+ * Database sniffs are based on the version of the database server in use.
*
* WPDB sniffs are added as new features are introduced to allow theme and plugin
* developers to determine feature support. This is to account for drop-ins which may
@@ -4115,7 +4125,7 @@ class wpdb {
}
/**
- * Retrieves the database server version.
+ * Retrieves the database server version number.
*
* @since 2.7.0
*
@@ -4126,11 +4136,11 @@ class wpdb {
}
/**
- * Returns the version of the MySQL server.
+ * Returns the raw version string of the database server.
*
* @since 5.5.0
*
- * @return string Server version as a string.
+ * @return string Database server version as a string.
*/
public function db_server_info() {
return mysqli_get_server_info( $this->dbh );
diff --git a/src/wp-includes/comment-template.php b/src/wp-includes/comment-template.php
index 9190cf6eff..59f89f3a84 100644
--- a/src/wp-includes/comment-template.php
+++ b/src/wp-includes/comment-template.php
@@ -834,12 +834,8 @@ function get_comment_link( $comment = null, $args = array() ) {
if ( $cpage && get_option( 'page_comments' ) ) {
if ( $wp_rewrite->using_permalinks() ) {
- if ( $cpage ) {
- $comment_link = trailingslashit( $comment_link ) . $wp_rewrite->comments_pagination_base . '-' . $cpage;
- }
-
- $comment_link = user_trailingslashit( $comment_link, 'comment' );
- } elseif ( $cpage ) {
+ $comment_link = trailingslashit( $comment_link ) . $wp_rewrite->comments_pagination_base . '-' . $cpage;
+ } else {
$comment_link = add_query_arg( 'cpage', $cpage, $comment_link );
}
}
@@ -1754,7 +1750,7 @@ function comments_popup_link( $zero = false, $one = false, $more = false, $css_c
* @param int|WP_Comment $comment Optional. Comment being replied to. Default current comment.
* @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on.
* Default current post.
- * @return string|false|null Link to show comment form, if successful. False, if comments are closed.
+ * @return string|false|null Link to show comment form on success. False if comments are closed. Null on failure.
*/
function get_comment_reply_link( $args = array(), $comment = null, $post = null ) {
$defaults = array(
@@ -1777,13 +1773,13 @@ function get_comment_reply_link( $args = array(), $comment = null, $post = null
$args['depth'] = (int) $args['depth'];
if ( 0 === $args['depth'] || $args['max_depth'] <= $args['depth'] ) {
- return;
+ return null;
}
$comment = get_comment( $comment );
if ( empty( $comment ) ) {
- return;
+ return null;
}
if ( empty( $post ) ) {
@@ -1911,9 +1907,9 @@ function comment_reply_link( $args = array(), $comment = null, $post = null ) {
* @type string $before Text or HTML to add before the reply link. Default empty.
* @type string $after Text or HTML to add after the reply link. Default empty.
* }
- * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on.
- * Default current post.
- * @return string|false|null Link to show comment form, if successful. False, if comments are closed.
+ * @param int|WP_Post $post Optional. Post ID or WP_Post object the comment is going to be displayed on.
+ * Default current post.
+ * @return string|false Link to show comment form on success. False if comments are closed.
*/
function get_post_reply_link( $args = array(), $post = null ) {
$defaults = array(
@@ -2095,8 +2091,8 @@ function comment_id_fields( $post = null ) {
*
* Only affects users with JavaScript disabled.
*
- * @internal The $comment global must be present to allow template tags access to the current
- * comment. See https://core.trac.wordpress.org/changeset/36512.
+ * {@internal The $comment global must be present to allow template tags access to the current
+ * comment. See https://core.trac.wordpress.org/changeset/36512.}
*
* @since 2.7.0
* @since 6.2.0 Added the `$post` parameter.
@@ -2446,6 +2442,7 @@ function wp_list_comments( $args = array(), $comments = null ) {
* @since 4.6.0 Introduced the 'action' argument.
* @since 4.9.6 Introduced the 'cookies' default comment field.
* @since 5.5.0 Introduced the 'class_container' argument.
+ * @since 6.8.2 Introduced the 'novalidate' argument.
*
* @param array $args {
* Optional. Default arguments and form fields to override.
@@ -2467,6 +2464,7 @@ function wp_list_comments( $args = array(), $comments = null ) {
* Default 'Your email address will not be published.'.
* @type string $comment_notes_after HTML element for a message displayed after the textarea field.
* @type string $action The comment form element action attribute. Default '/wp-comments-post.php'.
+ * @type bool $novalidate Whether the novalidate attribute is added to the comment form. Default false.
* @type string $id_form The comment form element id attribute. Default 'commentform'.
* @type string $id_submit The comment submit element id attribute. Default 'submit'.
* @type string $class_container The comment form container class attribute. Default 'comment-respond'.
@@ -2646,6 +2644,7 @@ function comment_form( $args = array(), $post = null ) {
),
'comment_notes_after' => '',
'action' => site_url( '/wp-comments-post.php' ),
+ 'novalidate' => false,
'id_form' => 'commentform',
'id_submit' => 'submit',
'class_container' => 'comment-respond',
@@ -2729,7 +2728,7 @@ function comment_form( $args = array(), $post = null ) {
esc_url( $args['action'] ),
esc_attr( $args['id_form'] ),
esc_attr( $args['class_form'] ),
- ( $html5 ? ' novalidate' : '' )
+ ( $args['novalidate'] ? ' novalidate' : '' )
);
/**
diff --git a/src/wp-includes/comment.php b/src/wp-includes/comment.php
index 20c219cd27..aabe9f60db 100644
--- a/src/wp-includes/comment.php
+++ b/src/wp-includes/comment.php
@@ -446,6 +446,8 @@ function get_comment_count( $post_id = 0 ) {
/**
* Adds meta data field to a comment.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 2.9.0
*
* @link https://developer.wordpress.org/reference/functions/add_comment_meta/
@@ -474,6 +476,8 @@ function add_comment_meta( $comment_id, $meta_key, $meta_value, $unique = false
* value, will keep from removing duplicate metadata with the same key. It also
* allows removing all metadata matching key, if needed.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 2.9.0
*
* @link https://developer.wordpress.org/reference/functions/delete_comment_meta/
@@ -540,6 +544,8 @@ function wp_lazyload_comment_meta( array $comment_ids ) {
*
* If the meta field for the comment does not exist, it will be added.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 2.9.0
*
* @link https://developer.wordpress.org/reference/functions/update_comment_meta/
@@ -926,8 +932,8 @@ function wp_check_comment_flood( $is_flood, $ip, $email, $date, $avoid_die = fal
*
* @since 2.7.0
*
- * @param WP_Comment[] $comments Array of comments
- * @return WP_Comment[] Array of comments keyed by comment_type.
+ * @param WP_Comment[] $comments Array of comments.
+ * @return array<string, WP_Comment[]> Array of comments keyed by comment type.
*/
function separate_comments( &$comments ) {
$comments_by_type = array(
@@ -1044,7 +1050,7 @@ function get_page_of_comment( $comment_id, $args = array() ) {
$comment = get_comment( $comment_id );
if ( ! $comment ) {
- return;
+ return null;
}
$defaults = array(
@@ -2319,7 +2325,7 @@ function wp_new_comment( $commentdata, $wp_error = false ) {
}
if ( empty( $commentdata['comment_date_gmt'] ) ) {
- $commentdata['comment_date_gmt'] = current_time( 'mysql', 1 );
+ $commentdata['comment_date_gmt'] = current_time( 'mysql', true );
}
if ( empty( $commentdata['comment_type'] ) ) {
@@ -3054,22 +3060,19 @@ function do_trackbacks( $post ) {
$post_title = apply_filters( 'the_title', $post->post_title, $post->ID );
$post_title = strip_tags( $post_title );
- if ( $to_ping ) {
- foreach ( (array) $to_ping as $tb_ping ) {
- $tb_ping = trim( $tb_ping );
- if ( ! in_array( $tb_ping, $pinged, true ) ) {
- trackback( $tb_ping, $post_title, $excerpt, $post->ID );
- $pinged[] = $tb_ping;
- } else {
- $wpdb->query(
- $wpdb->prepare(
- "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s,
- '')) WHERE ID = %d",
- $tb_ping,
- $post->ID
- )
- );
- }
+ foreach ( (array) $to_ping as $tb_ping ) {
+ $tb_ping = trim( $tb_ping );
+ if ( ! in_array( $tb_ping, $pinged, true ) ) {
+ trackback( $tb_ping, $post_title, $excerpt, $post->ID );
+ $pinged[] = $tb_ping;
+ } else {
+ $wpdb->query(
+ $wpdb->prepare(
+ "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d",
+ $tb_ping,
+ $post->ID
+ )
+ );
}
}
}
@@ -3430,9 +3433,9 @@ function _prime_comment_caches( $comment_ids, $update_meta_cache = true ) {
* @since 2.7.0
* @access private
*
- * @param WP_Post $posts Post data object.
- * @param WP_Query $query Query object.
- * @return array
+ * @param WP_Post[] $posts Array of post objects.
+ * @param WP_Query $query Query object.
+ * @return WP_Post[]
*/
function _close_comments_for_old_posts( $posts, $query ) {
if ( empty( $posts ) || ! $query->is_singular() || ! get_option( 'close_comments_for_old_posts' ) ) {
diff --git a/src/wp-includes/compat.php b/src/wp-includes/compat.php
index fc6db436fe..f0bdf07974 100644
--- a/src/wp-includes/compat.php
+++ b/src/wp-includes/compat.php
@@ -13,6 +13,16 @@
// If gettext isn't available.
if ( ! function_exists( '_' ) ) {
+ /**
+ * Compat function to mimic _(), an alias of gettext().
+ *
+ * @since 0.71
+ *
+ * @see https://php.net/manual/en/function.gettext.php
+ *
+ * @param string $message The message being translated.
+ * @return string
+ */
function _( $message ) {
return $message;
}
diff --git a/src/wp-includes/css/wp-embed-template.css b/src/wp-includes/css/wp-embed-template.css
index b5a482b737..7b86fdd3d3 100644
--- a/src/wp-includes/css/wp-embed-template.css
+++ b/src/wp-includes/css/wp-embed-template.css
@@ -39,15 +39,15 @@ body {
}
.dashicons-admin-comments {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%2382878c%27%2F%3E%3C%2Fsvg%3E");
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%23646970%27%2F%3E%3C%2Fsvg%3E");
}
.wp-embed-comments a:hover .dashicons-admin-comments {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%230073aa%27%2F%3E%3C%2Fsvg%3E");
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M5%202h9q.82%200%201.41.59T16%204v7q0%20.82-.59%201.41T14%2013h-2l-5%205v-5H5q-.82%200-1.41-.59T3%2011V4q0-.82.59-1.41T5%202z%27%20fill%3D%27%23135e96%27%2F%3E%3C%2Fsvg%3E");
}
.dashicons-share {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%2382878c%27%2F%3E%3C%2Fsvg%3E");
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%23646970%27%2F%3E%3C%2Fsvg%3E");
display: none;
}
@@ -56,7 +56,7 @@ body {
}
.wp-embed-share-dialog-open:hover .dashicons-share {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%230073aa%27%2F%3E%3C%2Fsvg%3E");
+ background-image: url("data:image/svg+xml;charset=utf8,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%2020%2020%27%3E%3Cpath%20d%3D%27M14.5%2012q1.24%200%202.12.88T17.5%2015t-.88%202.12-2.12.88-2.12-.88T11.5%2015q0-.34.09-.69l-4.38-2.3Q6.32%2013%205%2013q-1.24%200-2.12-.88T2%2010t.88-2.12T5%207q1.3%200%202.21.99l4.38-2.3q-.09-.35-.09-.69%200-1.24.88-2.12T14.5%202t2.12.88T17.5%205t-.88%202.12T14.5%208q-1.3%200-2.21-.99l-4.38%202.3Q8%209.66%208%2010t-.09.69l4.38%202.3q.89-.99%202.21-.99z%27%20fill%3D%27%23135e96%27%2F%3E%3C%2Fsvg%3E");
}
.wp-embed {
@@ -65,7 +65,7 @@ body {
font-weight: 400;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
line-height: 1.5;
- color: #8c8f94;
+ color: #646970;
background: #fff;
border: 1px solid #dcdcde;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);
@@ -75,7 +75,7 @@ body {
}
.wp-embed a {
- color: #8c8f94;
+ color: #646970;
text-decoration: none;
}
@@ -115,7 +115,8 @@ p.wp-embed-heading {
}
.wp-embed .wp-embed-more {
- color: #c3c4c7;
+ color: #2271b1;
+ text-decoration: underline;
}
.wp-embed-footer {
@@ -163,7 +164,7 @@ p.wp-embed-heading {
.wp-embed-meta a:hover {
text-decoration: none;
- color: #2271b1;
+ color: #135e96;
}
.wp-embed-comments a {
diff --git a/src/wp-includes/embed.php b/src/wp-includes/embed.php
index b5b30acead..c38a079003 100644
--- a/src/wp-includes/embed.php
+++ b/src/wp-includes/embed.php
@@ -765,7 +765,7 @@ function wp_oembed_ensure_format( $format ) {
* @param WP_HTTP_Response $result Result to send to the client. Usually a `WP_REST_Response`.
* @param WP_REST_Request $request Request used to generate the response.
* @param WP_REST_Server $server Server instance.
- * @return true
+ * @return bool True if the request was served, false otherwise.
*/
function _oembed_rest_pre_serve_request( $served, $result, $request, $server ) {
$params = $request->get_params();
@@ -843,10 +843,10 @@ function _oembed_create_xml( $data, $node = null ) {
*
* @since 5.2.0
*
- * @param string $result The oEmbed HTML result.
- * @param object $data A data object result from an oEmbed provider.
- * @param string $url The URL of the content to be embedded.
- * @return string The filtered oEmbed result.
+ * @param string|false $result The oEmbed HTML result.
+ * @param object $data A data object result from an oEmbed provider.
+ * @param string $url The URL of the content to be embedded.
+ * @return string|false The filtered oEmbed result.
*/
function wp_filter_oembed_iframe_title_attribute( $result, $data, $url ) {
if ( false === $result || ! in_array( $data->type, array( 'rich', 'video' ), true ) ) {
@@ -910,10 +910,10 @@ function wp_filter_oembed_iframe_title_attribute( $result, $data, $url ) {
*
* @since 4.4.0
*
- * @param string $result The oEmbed HTML result.
- * @param object $data A data object result from an oEmbed provider.
- * @param string $url The URL of the content to be embedded.
- * @return string The filtered and sanitized oEmbed result.
+ * @param string|false $result The oEmbed HTML result.
+ * @param object $data A data object result from an oEmbed provider.
+ * @param string $url The URL of the content to be embedded.
+ * @return string|false The filtered and sanitized oEmbed result.
*/
function wp_filter_oembed_result( $result, $data, $url ) {
if ( false === $result || ! in_array( $data->type, array( 'rich', 'video' ), true ) ) {
diff --git a/src/wp-includes/formatting.php b/src/wp-includes/formatting.php
index 744eefeb82..234d71a2a1 100644
--- a/src/wp-includes/formatting.php
+++ b/src/wp-includes/formatting.php
@@ -2035,7 +2035,17 @@ function sanitize_file_name( $filename ) {
}
if ( $utf8_pcre ) {
- $filename = preg_replace( "#\x{00a0}#siu", ' ', $filename );
+ /**
+ * Replace all whitespace characters with a basic space (U+0020).
+ *
+ * The “Zs” in the pattern selects characters in the `Space_Separator`
+ * category, which is what Unicode considers space characters.
+ *
+ * @see https://www.unicode.org/reports/tr44/#General_Category_Values
+ * @see https://www.unicode.org/versions/Unicode16.0.0/core-spec/chapter-6/#G17548
+ * @see https://www.php.net/manual/en/regexp.reference.unicode.php
+ */
+ $filename = preg_replace( '#\p{Zs}#siu', ' ', $filename );
}
/**
@@ -2551,6 +2561,11 @@ function balanceTags( $text, $force = false ) { // phpcs:ignore WordPress.Namin
/**
* Balances tags of string using a modified stack.
*
+ * {@internal Modified by Scott Reilly (coffee2code) 02 Aug 2004
+ * 1.1 Fixed handling of append/stack pop order of end text
+ * Added Cleaning Hooks
+ * 1.0 First Version}
+ *
* @since 2.0.4
* @since 5.3.0 Improve accuracy and add support for custom element tags.
*
@@ -2559,10 +2574,6 @@ function balanceTags( $text, $force = false ) { // phpcs:ignore WordPress.Namin
* @copyright November 4, 2001
* @version 1.1
* @todo Make better - change loop condition to $text in 1.2
- * @internal Modified by Scott Reilly (coffee2code) 02 Aug 2004
- * 1.1 Fixed handling of append/stack pop order of end text
- * Added Cleaning Hooks
- * 1.0 First Version
*
* @param string $text Text to be balanced.
* @return string Balanced text.
diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php
index 3a965a2d3d..09d344dd1e 100644
--- a/src/wp-includes/general-template.php
+++ b/src/wp-includes/general-template.php
@@ -2289,7 +2289,6 @@ function get_calendar( $args = array() ) {
* @type bool $display Whether to display the calendar output. Default true.
* @type string $post_type Optional. Post type. Default 'post'.
* }
- * @return array The arguments for the `get_calendar` function.
*/
$args = apply_filters( 'get_calendar_args', wp_parse_args( $args, $defaults ) );
@@ -2494,7 +2493,7 @@ function get_calendar( $args = array() ) {
$daysinmonth = (int) gmdate( 't', $unixmonth );
for ( $day = 1; $day <= $daysinmonth; ++$day ) {
- if ( isset( $newrow ) && $newrow ) {
+ if ( $newrow ) {
$calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
}
diff --git a/src/wp-includes/kses.php b/src/wp-includes/kses.php
index ebb4a761b1..28bbce222a 100644
--- a/src/wp-includes/kses.php
+++ b/src/wp-includes/kses.php
@@ -2083,18 +2083,38 @@ function wp_kses_normalize_entities3( $matches ) {
/**
* Determines if a Unicode codepoint is valid.
*
+ * The definition of a valid Unicode codepoint is taken from the XML definition:
+ *
+ * > Characters
+ * >
+ * > …
+ * > Legal characters are tab, carriage return, line feed, and the legal characters of
+ * > Unicode and ISO/IEC 10646.
+ * > …
+ * > Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
+ *
* @since 2.7.0
*
+ * @see https://www.w3.org/TR/xml/#charsets
+ *
* @param int $i Unicode codepoint.
* @return bool Whether or not the codepoint is a valid Unicode codepoint.
*/
function valid_unicode( $i ) {
$i = (int) $i;
- return ( 0x9 === $i || 0xa === $i || 0xd === $i ||
- ( 0x20 <= $i && $i <= 0xd7ff ) ||
- ( 0xe000 <= $i && $i <= 0xfffd ) ||
- ( 0x10000 <= $i && $i <= 0x10ffff )
+ return (
+ 0x9 === $i || // U+0009 HORIZONTAL TABULATION (HT)
+ 0xA === $i || // U+000A LINE FEED (LF)
+ 0xD === $i || // U+000D CARRIAGE RETURN (CR)
+ /*
+ * The valid Unicode characters according to the XML specification:
+ *
+ * > any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
+ */
+ ( 0x20 <= $i && $i <= 0xD7FF ) ||
+ ( 0xE000 <= $i && $i <= 0xFFFD ) ||
+ ( 0x10000 <= $i && $i <= 0x10FFFF )
);
}
diff --git a/src/wp-includes/link-template.php b/src/wp-includes/link-template.php
index 3e02c17853..cf41630c4a 100644
--- a/src/wp-includes/link-template.php
+++ b/src/wp-includes/link-template.php
@@ -4298,6 +4298,8 @@ function the_shortlink( $text = '', $title = '', $before = '', $after = '' ) {
* - 'monsterid' (a monster)
* - 'wavatar' (a cartoon face)
* - 'identicon' (the "quilt", a geometric pattern)
+ * - 'initials' (initials based avatar with background color)
+ * - 'color' (generated background color)
* - 'mystery', 'mm', or 'mysteryman' (The Oyster Man)
* - 'blank' (transparent GIF)
* - 'gravatar_default' (the Gravatar logo)
@@ -4366,6 +4368,8 @@ function is_avatar_comment_type( $comment_type ) {
* - 'monsterid' (a monster)
* - 'wavatar' (a cartoon face)
* - 'identicon' (the "quilt", a geometric pattern)
+ * - 'initials' (initials based avatar with background color)
+ * - 'color' (generated background color)
* - 'mystery', 'mm', or 'mysteryman' (The Oyster Man)
* - 'blank' (transparent GIF)
* - 'gravatar_default' (the Gravatar logo)
@@ -4545,6 +4549,33 @@ function get_avatar_data( $id_or_email, $args = null ) {
'r' => $args['rating'],
);
+ // Handle additional parameters for the 'initials' avatar type
+ if ( 'initials' === $args['default'] ) {
+ $name = '';
+
+ if ( $user ) {
+ $name = ! empty( $user->display_name ) ? $user->display_name :
+ ( ! empty( $user->first_name ) && ! empty( $user->last_name ) ?
+ $user->first_name . ' ' . $user->last_name : $user->user_login );
+ } elseif ( is_object( $id_or_email ) && isset( $id_or_email->comment_author ) ) {
+ $name = $id_or_email->comment_author;
+ } elseif ( is_string( $id_or_email ) && false !== strpos( $id_or_email, '@' ) ) {
+ $name = str_replace( array( '.', '_', '-' ), ' ', substr( $id_or_email, 0, strpos( $id_or_email, '@' ) ) );
+ }
+
+ if ( ! empty( $name ) ) {
+ if ( preg_match( '/\p{Han}|\p{Hiragana}|\p{Katakana}|\p{Hangul}/u', $name ) || false === strpos( $name, ' ' ) ) {
+ $initials = mb_substr( $name, 0, min( 2, mb_strlen( $name, 'UTF-8' ) ), 'UTF-8' );
+ } else {
+ $first = mb_substr( $name, 0, 1, 'UTF-8' );
+ $last = mb_substr( $name, strrpos( $name, ' ' ) + 1, 1, 'UTF-8' );
+ $initials = $first . $last;
+ }
+
+ $url_args['initials'] = $initials;
+ }
+ }
+
/*
* Gravatars are always served over HTTPS.
*
diff --git a/src/wp-includes/load.php b/src/wp-includes/load.php
index 0526cb175d..e51c322908 100644
--- a/src/wp-includes/load.php
+++ b/src/wp-includes/load.php
@@ -139,15 +139,18 @@ function wp_populate_basic_auth_from_authorization_header() {
}
/**
- * Checks for the required PHP version, and the mysqli extension or
- * a database drop-in.
+ * Checks the server requirements.
+ *
+ * - PHP version
+ * - PHP extensions
+ * - MySQL or MariaDB version (unless a database drop-in is present)
*
* Dies if requirements are not met.
*
* @since 3.0.0
* @access private
*
- * @global string $required_php_version The required PHP version string.
+ * @global string $required_php_version The minimum required PHP version string.
* @global string[] $required_php_extensions The names of required PHP extensions.
* @global string $wp_version The WordPress version string.
*/
diff --git a/src/wp-includes/media-template.php b/src/wp-includes/media-template.php
index 86fe200f8d..4e7592bd74 100644
--- a/src/wp-includes/media-template.php
+++ b/src/wp-includes/media-template.php
@@ -443,7 +443,7 @@ function wp_print_media_templates() {
?>
</h2>
<div class="uploaded"><strong><?php _e( 'Uploaded on:' ); ?></strong> {{ data.dateFormatted }}</div>
- <div class="uploaded-by">
+ <div class="uploaded-by word-wrap-break-word">
<strong><?php _e( 'Uploaded by:' ); ?></strong>
<# if ( data.authorLink ) { #>
<a href="{{ data.authorLink }}">{{ data.authorName }}</a>
@@ -605,7 +605,7 @@ function wp_print_media_templates() {
<div class="centered">
<# if ( data.image && data.image.src && data.image.src !== data.icon ) { #>
<img src="{{ data.image.src }}" class="thumbnail" draggable="false" alt="" />
- <# } else if ( data.sizes ) {
+ <# } else if ( data.sizes ) {
if ( data.sizes.medium ) { #>
<img src="{{ data.sizes.medium.url }}" class="thumbnail" draggable="false" alt="" />
<# } else { #>
diff --git a/src/wp-includes/media.php b/src/wp-includes/media.php
index da46ef90a7..5d95b0a188 100644
--- a/src/wp-includes/media.php
+++ b/src/wp-includes/media.php
@@ -2992,9 +2992,6 @@ function wp_underscore_playlist_templates() {
function wp_playlist_scripts( $type ) {
wp_enqueue_style( 'wp-mediaelement' );
wp_enqueue_script( 'wp-playlist' );
- ?>
-<!--[if lt IE 9]><script>document.createElement('<?php echo esc_js( $type ); ?>');</script><![endif]-->
- <?php
add_action( 'wp_footer', 'wp_underscore_playlist_templates', 0 );
add_action( 'admin_footer', 'wp_underscore_playlist_templates', 0 );
}
@@ -3502,14 +3499,7 @@ function wp_audio_shortcode( $attr, $content = '' ) {
}
}
- $html = '';
-
- if ( 'mediaelement' === $library && 1 === $instance ) {
- $html .= "<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->\n";
- }
-
- $html .= sprintf( '<audio %s controls="controls">', implode( ' ', $attr_strings ) );
-
+ $html = sprintf( '<audio %s controls="controls">', implode( ' ', $attr_strings ) );
$fileurl = '';
$source = '<source type="%s" src="%s" />';
@@ -3787,14 +3777,7 @@ function wp_video_shortcode( $attr, $content = '' ) {
}
}
- $html = '';
-
- if ( 'mediaelement' === $library && 1 === $instance ) {
- $html .= "<!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->\n";
- }
-
- $html .= sprintf( '<video %s controls="controls">', implode( ' ', $attr_strings ) );
-
+ $html = sprintf( '<video %s controls="controls">', implode( ' ', $attr_strings ) );
$fileurl = '';
$source = '<source type="%s" src="%s" />';
diff --git a/src/wp-includes/meta.php b/src/wp-includes/meta.php
index 6982e618c3..d60bf5e875 100644
--- a/src/wp-includes/meta.php
+++ b/src/wp-includes/meta.php
@@ -15,12 +15,14 @@ require ABSPATH . WPINC . '/class-wp-metadata-lazyloader.php';
/**
* Adds metadata for the specified object.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 2.9.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $meta_value Metadata value. Arrays and objects are stored as serialized data and
@@ -65,11 +67,12 @@ function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique =
* Short-circuits adding metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `add_blog_metadata`
* - `add_post_metadata`
* - `add_comment_metadata`
* - `add_term_metadata`
@@ -77,11 +80,12 @@ function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique =
*
* @since 3.1.0
*
- * @param null|bool $check Whether to allow adding metadata for the given type.
- * @param int $object_id ID of the object metadata is for.
- * @param string $meta_key Metadata key.
- * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
- * @param bool $unique Whether the specified meta key should be unique for the object.
+ * @param null|int|false $check Whether to allow adding metadata for the given type. Return false or a meta ID
+ * to short-circuit the function. Return null to continue with the default behavior.
+ * @param int $object_id ID of the object metadata is for.
+ * @param string $meta_key Metadata key.
+ * @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
+ * @param bool $unique Whether the specified meta key should be unique for the object.
*/
$check = apply_filters( "add_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $unique );
if ( null !== $check ) {
@@ -105,10 +109,11 @@ function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique =
* Fires immediately before meta of a specific type is added.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `add_blog_meta`
* - `add_post_meta`
* - `add_comment_meta`
* - `add_term_meta`
@@ -143,10 +148,11 @@ function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique =
* Fires immediately after meta of a specific type is added.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `added_blog_meta`
* - `added_post_meta`
* - `added_comment_meta`
* - `added_term_meta`
@@ -168,12 +174,14 @@ function add_metadata( $meta_type, $object_id, $meta_key, $meta_value, $unique =
* Updates metadata for the specified object. If no value already exists for the specified object
* ID and metadata key, the metadata will be added.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 2.9.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $meta_value Metadata value. Must be serializable if non-scalar.
@@ -218,11 +226,12 @@ function update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_
* Short-circuits updating metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `update_blog_metadata`
* - `update_post_metadata`
* - `update_comment_metadata`
* - `update_term_metadata`
@@ -277,10 +286,11 @@ function update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_
* Fires immediately before updating metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `update_blog_meta`
* - `update_post_meta`
* - `update_comment_meta`
* - `update_term_meta`
@@ -323,10 +333,11 @@ function update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_
* Fires immediately after updating metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `updated_blog_meta`
* - `updated_post_meta`
* - `updated_comment_meta`
* - `updated_term_meta`
@@ -363,12 +374,14 @@ function update_metadata( $meta_type, $object_id, $meta_key, $meta_value, $prev_
/**
* Deletes metadata for the specified object.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 2.9.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param mixed $meta_value Optional. Metadata value. Must be serializable if non-scalar.
@@ -411,11 +424,12 @@ function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $
* Short-circuits deleting metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `delete_blog_metadata`
* - `delete_post_metadata`
* - `delete_comment_metadata`
* - `delete_term_metadata`
@@ -466,10 +480,11 @@ function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $
* Fires immediately before deleting metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `delete_blog_meta`
* - `delete_post_meta`
* - `delete_comment_meta`
* - `delete_term_meta`
@@ -515,10 +530,11 @@ function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $
* Fires immediately after deleting metadata of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `deleted_blog_meta`
* - `deleted_post_meta`
* - `deleted_comment_meta`
* - `deleted_term_meta`
@@ -563,8 +579,8 @@ function delete_metadata( $meta_type, $object_id, $meta_key, $meta_value = '', $
* @see get_metadata_raw()
* @see get_metadata_default()
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for
* the specified object. Default empty string.
@@ -596,8 +612,8 @@ function get_metadata( $meta_type, $object_id, $meta_key = '', $single = false )
*
* @since 5.5.0
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for
* the specified object. Default empty string.
@@ -623,11 +639,12 @@ function get_metadata_raw( $meta_type, $object_id, $meta_key = '', $single = fal
* Short-circuits the return value of a meta field.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible filter names include:
*
+ * - `get_blog_metadata`
* - `get_post_metadata`
* - `get_comment_metadata`
* - `get_term_metadata`
@@ -641,8 +658,8 @@ function get_metadata_raw( $meta_type, $object_id, $meta_key = '', $single = fal
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param bool $single Whether to return only the first value of the specified `$meta_key`.
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
*/
$check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single, $meta_type );
if ( null !== $check ) {
@@ -687,8 +704,8 @@ function get_metadata_raw( $meta_type, $object_id, $meta_key = '', $single = fal
*
* @since 5.5.0
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param bool $single Optional. If true, return only the first value of the specified `$meta_key`.
@@ -707,10 +724,11 @@ function get_metadata_default( $meta_type, $object_id, $meta_key, $single = fals
* Filters the default metadata value for a specified meta key and object.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible filter names include:
*
+ * - `default_blog_metadata`
* - `default_post_metadata`
* - `default_comment_metadata`
* - `default_term_metadata`
@@ -723,8 +741,8 @@ function get_metadata_default( $meta_type, $object_id, $meta_key, $single = fals
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @param bool $single Whether to return only the first value of the specified `$meta_key`.
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
*/
$value = apply_filters( "default_{$meta_type}_metadata", $value, $object_id, $meta_key, $single, $meta_type );
@@ -740,8 +758,8 @@ function get_metadata_default( $meta_type, $object_id, $meta_key, $single = fals
*
* @since 3.3.0
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object metadata is for.
* @param string $meta_key Metadata key.
* @return bool Whether a meta field with the given key exists.
@@ -783,8 +801,8 @@ function metadata_exists( $meta_type, $object_id, $meta_key ) {
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $meta_id ID for a specific meta row.
* @return stdClass|false {
* Metadata object, or boolean `false` if the metadata doesn't exist.
@@ -793,6 +811,7 @@ function metadata_exists( $meta_type, $object_id, $meta_key ) {
* @type mixed $meta_value The unserialized meta value.
* @type string $meta_id Optional. The meta ID when the meta type is any value except 'user'.
* @type string $umeta_id Optional. The meta ID when the meta type is 'user'.
+ * @type string $blog_id Optional. The object ID when the meta type is 'blog'.
* @type string $post_id Optional. The object ID when the meta type is 'post'.
* @type string $comment_id Optional. The object ID when the meta type is 'comment'.
* @type string $term_id Optional. The object ID when the meta type is 'term'.
@@ -820,11 +839,12 @@ function get_metadata_by_mid( $meta_type, $meta_id ) {
* Short-circuits the return value when fetching a meta field by meta ID.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `get_blog_metadata_by_mid`
* - `get_post_metadata_by_mid`
* - `get_comment_metadata_by_mid`
* - `get_term_metadata_by_mid`
@@ -862,8 +882,8 @@ function get_metadata_by_mid( $meta_type, $meta_id ) {
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $meta_id ID for a specific meta row.
* @param string $meta_value Metadata value. Must be serializable if non-scalar.
* @param string|false $meta_key Optional. You can provide a meta key to update it. Default false.
@@ -894,11 +914,12 @@ function update_metadata_by_mid( $meta_type, $meta_id, $meta_value, $meta_key =
* Short-circuits updating metadata of a specific type by meta ID.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `update_blog_metadata_by_mid`
* - `update_post_metadata_by_mid`
* - `update_comment_metadata_by_mid`
* - `update_term_metadata_by_mid`
@@ -988,8 +1009,8 @@ function update_metadata_by_mid( $meta_type, $meta_id, $meta_value, $meta_key =
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $meta_id ID for a specific meta row.
* @return bool True on successful delete, false on failure.
*/
@@ -1019,11 +1040,12 @@ function delete_metadata_by_mid( $meta_type, $meta_id ) {
* Short-circuits deleting metadata of a specific type by meta ID.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `delete_blog_metadata_by_mid`
* - `delete_post_metadata_by_mid`
* - `delete_comment_metadata_by_mid`
* - `delete_term_metadata_by_mid`
@@ -1059,8 +1081,6 @@ function delete_metadata_by_mid( $meta_type, $meta_id ) {
*
* - `delete_postmeta`
* - `delete_commentmeta`
- * - `delete_termmeta`
- * - `delete_usermeta`
*
* @since 3.4.0
*
@@ -1090,8 +1110,6 @@ function delete_metadata_by_mid( $meta_type, $meta_id ) {
*
* - `deleted_postmeta`
* - `deleted_commentmeta`
- * - `deleted_termmeta`
- * - `deleted_usermeta`
*
* @since 3.4.0
*
@@ -1115,8 +1133,8 @@ function delete_metadata_by_mid( $meta_type, $meta_id ) {
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string|int[] $object_ids Array or comma delimited list of object IDs to update cache for.
* @return array|false Metadata cache for the specified objects, or false on failure.
*/
@@ -1145,11 +1163,12 @@ function update_meta_cache( $meta_type, $object_ids ) {
* Short-circuits updating the metadata cache of a specific type.
*
* The dynamic portion of the hook name, `$meta_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
* Returning a non-null value will effectively short-circuit the function.
*
* Possible hook names include:
*
+ * - `update_blog_metadata_cache`
* - `update_post_metadata_cache`
* - `update_comment_metadata_cache`
* - `update_term_metadata_cache`
@@ -1268,8 +1287,8 @@ function get_meta_sql( $meta_query, $type, $primary_table, $primary_id_column, $
*
* @global wpdb $wpdb WordPress database abstraction object.
*
- * @param string $type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @return string|false Metadata table name, or false if no metadata table exists
*/
function _get_meta_table( $type ) {
@@ -1290,8 +1309,8 @@ function _get_meta_table( $type ) {
* @since 3.1.3
*
* @param string $meta_key Metadata key.
- * @param string $meta_type Optional. Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table. Default empty string.
+ * @param string $meta_type Optional. Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table. Default empty string.
* @return bool Whether the meta key is considered protected.
*/
function is_protected_meta( $meta_key, $meta_type = '' ) {
@@ -1305,8 +1324,8 @@ function is_protected_meta( $meta_key, $meta_type = '' ) {
*
* @param bool $protected Whether the key is considered protected.
* @param string $meta_key Metadata key.
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
*/
return apply_filters( 'is_protected_meta', $protected, $meta_key, $meta_type );
}
@@ -1319,8 +1338,8 @@ function is_protected_meta( $meta_key, $meta_type = '' ) {
*
* @param string $meta_key Metadata key.
* @param mixed $meta_value Metadata value to sanitize.
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $object_subtype Optional. The subtype of the object type. Default empty string.
* @return mixed Sanitized $meta_value.
*/
@@ -1331,15 +1350,15 @@ function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype =
* Filters the sanitization of a specific meta key of a specific meta type and subtype.
*
* The dynamic portions of the hook name, `$object_type`, `$meta_key`,
- * and `$object_subtype`, refer to the metadata object type (comment, post, term, or user),
+ * and `$object_subtype`, refer to the metadata object type (blog, comment, post, term, or user),
* the meta key value, and the object subtype respectively.
*
* @since 4.9.8
*
* @param mixed $meta_value Metadata value to sanitize.
* @param string $meta_key Metadata key.
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $object_subtype Object subtype.
*/
return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}_for_{$object_subtype}", $meta_value, $meta_key, $object_type, $object_subtype );
@@ -1349,15 +1368,15 @@ function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype =
* Filters the sanitization of a specific meta key of a specific meta type.
*
* The dynamic portions of the hook name, `$meta_type`, and `$meta_key`,
- * refer to the metadata object type (comment, post, term, or user) and the meta
+ * refer to the metadata object type (blog, comment, post, term, or user) and the meta
* key value, respectively.
*
* @since 3.3.0
*
* @param mixed $meta_value Metadata value to sanitize.
* @param string $meta_key Metadata key.
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
*/
return apply_filters( "sanitize_{$object_type}_meta_{$meta_key}", $meta_value, $meta_key, $object_type );
}
@@ -1369,7 +1388,7 @@ function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype =
* an object subtype is omitted, the meta key will be registered for the entire object type, however it can be partly
* overridden in case a more specific meta key of the same name exists for the same object type and a subtype.
*
- * If an object type does not support any subtypes, such as users or comments, you should commonly call this function
+ * If an object type does not support any subtypes, such as blogs, users, or comments, you should commonly call this function
* without passing a subtype.
*
* @since 3.3.0
@@ -1382,8 +1401,8 @@ function sanitize_meta( $meta_key, $meta_value, $object_type, $object_subtype =
* @since 6.4.0 The `$revisions_enabled` argument was added to the arguments array.
* @since 6.7.0 The `label` argument was added to the arguments array.
*
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $meta_key Meta key to register.
* @param array $args {
* Data used to describe the meta key when registered.
@@ -1461,8 +1480,8 @@ function register_meta( $object_type, $meta_key, $args, $deprecated = null ) {
*
* @param array $args Array of meta registration arguments.
* @param array $defaults Array of default arguments.
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $meta_key Meta key.
*/
$args = apply_filters( 'register_meta_args', $args, $defaults, $object_type, $meta_key );
@@ -1557,8 +1576,8 @@ function register_meta( $object_type, $meta_key, $args, $deprecated = null ) {
* @param string $meta_key Metadata key.
* @param bool $single If true, return only the first value of the specified `$meta_key`.
* This parameter has no effect if `$meta_key` is not specified.
- * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $meta_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @return mixed An array of default values if `$single` is false.
* The default value of the meta field if `$single` is true.
*/
@@ -1612,8 +1631,8 @@ function filter_default_metadata( $value, $object_id, $meta_key, $single, $meta_
* @since 4.6.0
* @since 4.9.8 The `$object_subtype` parameter was added.
*
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $meta_key Metadata key.
* @param string $object_subtype Optional. The subtype of the object type. Default empty string.
* @return bool True if the meta key is registered to the object type and, if provided,
@@ -1631,8 +1650,8 @@ function registered_meta_key_exists( $object_type, $meta_key, $object_subtype =
* @since 4.6.0
* @since 4.9.8 The `$object_subtype` parameter was added.
*
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $meta_key Metadata key.
* @param string $object_subtype Optional. The subtype of the object type. Default empty string.
* @return bool True if successful. False if the meta key was not registered.
@@ -1681,8 +1700,8 @@ function unregister_meta_key( $object_type, $meta_key, $object_subtype = '' ) {
* @since 4.6.0
* @since 4.9.8 The `$object_subtype` parameter was added.
*
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param string $object_subtype Optional. The subtype of the object type. Default empty string.
* @return array[] List of registered metadata args, keyed by their meta keys.
*/
@@ -1704,8 +1723,8 @@ function get_registered_meta_keys( $object_type, $object_subtype = '' ) {
*
* @since 4.6.0
*
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object the metadata is for.
* @param string $meta_key Optional. Registered metadata key. If not specified, retrieve all registered
* metadata for the specified object.
@@ -1767,8 +1786,8 @@ function _wp_register_meta_args_allowed_list( $args, $default_args ) {
*
* @since 4.9.8
*
- * @param string $object_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
- * or any other object type with an associated meta table.
+ * @param string $object_type Type of object metadata is for. Accepts 'blog', 'post', 'comment', 'term',
+ * 'user', or any other object type with an associated meta table.
* @param int $object_id ID of the object to retrieve its subtype.
* @return string The object subtype or an empty string if unspecified subtype.
*/
@@ -1814,13 +1833,14 @@ function get_object_subtype( $object_type, $object_id ) {
}
/**
- * Filters the object subtype identifier for a non-standard object type.
+ * Filters the object subtype identifier.
*
* The dynamic portion of the hook name, `$object_type`, refers to the meta object type
- * (post, comment, term, user, or any other type with an associated meta table).
+ * (blog, post, comment, term, user, or any other type with an associated meta table).
*
* Possible hook names include:
*
+ * - `get_object_subtype_blog`
* - `get_object_subtype_post`
* - `get_object_subtype_comment`
* - `get_object_subtype_term`
@@ -1828,7 +1848,7 @@ function get_object_subtype( $object_type, $object_id ) {
*
* @since 4.9.8
*
- * @param string $object_subtype Empty string to override.
+ * @param string $object_subtype Object subtype or empty string to override.
* @param int $object_id ID of the object to get the subtype for.
*/
return apply_filters( "get_object_subtype_{$object_type}", $object_subtype, $object_id );
diff --git a/src/wp-includes/ms-load.php b/src/wp-includes/ms-load.php
index 0708bc4dcd..b8d5228d09 100644
--- a/src/wp-includes/ms-load.php
+++ b/src/wp-includes/ms-load.php
@@ -129,9 +129,9 @@ function ms_site_check() {
/**
* Retrieves the closest matching network for a domain and path.
*
- * @since 3.9.0
+ * {@internal In 4.4.0, converted to a wrapper for WP_Network::get_by_path()}
*
- * @internal In 4.4.0, converted to a wrapper for WP_Network::get_by_path()
+ * @since 3.9.0
*
* @param string $domain Domain to check.
* @param string $path Path to check.
@@ -552,12 +552,12 @@ function wpmu_current_site() {
/**
* Retrieves an object containing information about the requested network.
*
+ * {@internal In 4.6.0, converted to use get_network()}
+ *
* @since 3.9.0
* @deprecated 4.7.0 Use get_network()
* @see get_network()
*
- * @internal In 4.6.0, converted to use get_network()
- *
* @param object|int $network The network's database row or ID.
* @return WP_Network|false Object containing network information if found, false if not.
*/
diff --git a/src/wp-includes/ms-site.php b/src/wp-includes/ms-site.php
index 2a2b1474c5..0058d1a482 100644
--- a/src/wp-includes/ms-site.php
+++ b/src/wp-includes/ms-site.php
@@ -1022,6 +1022,8 @@ function clean_blog_cache( $blog ) {
/**
* Adds metadata to a site.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 5.1.0
*
* @param int $site_id Site ID.
@@ -1048,6 +1050,8 @@ function add_site_meta( $site_id, $meta_key, $meta_value, $unique = false ) {
* value, will keep from removing duplicate metadata with the same key. It also
* allows removing all metadata matching key, if needed.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 5.1.0
*
* @param int $site_id Site ID.
@@ -1090,11 +1094,13 @@ function get_site_meta( $site_id, $key = '', $single = false ) {
/**
* Updates metadata for a site.
*
- * Use the $prev_value parameter to differentiate between meta fields with the
+ * Use the `$prev_value` parameter to differentiate between meta fields with the
* same key and site ID.
*
* If the meta field for the site does not exist, it will be added.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 5.1.0
*
* @param int $site_id Site ID.
@@ -1237,7 +1243,7 @@ function wp_maybe_transition_site_statuses_on_update( $new_site, $old_site = nul
if ( '1' === $new_site->deleted ) {
/**
- * Fires when the 'deleted' status is added to a site.
+ * Fires when the 'flagged for deletion' status is added to a site.
*
* @since 3.5.0
*
@@ -1247,7 +1253,7 @@ function wp_maybe_transition_site_statuses_on_update( $new_site, $old_site = nul
} else {
/**
- * Fires when the 'deleted' status is removed from a site.
+ * Fires when the 'flagged for deletion' status is removed from a site.
*
* @since 3.5.0
*
diff --git a/src/wp-includes/option.php b/src/wp-includes/option.php
index 9760304efc..3b4f461724 100644
--- a/src/wp-includes/option.php
+++ b/src/wp-includes/option.php
@@ -1880,7 +1880,7 @@ function wp_set_all_user_settings( $user_settings ) {
}
if ( ! is_user_member_of_blog() ) {
- return;
+ return null;
}
$settings = '';
@@ -3176,7 +3176,23 @@ function unregister_setting( $option_group, $option_name, $deprecated = '' ) {
*
* @global array $wp_registered_settings
*
- * @return array List of registered settings, keyed by option name.
+ * @return array {
+ * List of registered settings, keyed by option name.
+ *
+ * @type array ...$0 {
+ * Data used to describe the setting when registered.
+ *
+ * @type string $type The type of data associated with this setting.
+ * Valid values are 'string', 'boolean', 'integer', 'number', 'array', and 'object'.
+ * @type string $label A label of the data attached to this setting.
+ * @type string $description A description of the data attached to this setting.
+ * @type callable $sanitize_callback A callback function that sanitizes the option's value.
+ * @type bool|array $show_in_rest Whether data associated with this setting should be included in the REST API.
+ * When registering complex settings, this argument may optionally be an
+ * array with a 'schema' key.
+ * @type mixed $default Default value when calling `get_option()`.
+ * }
+ * }
*/
function get_registered_settings() {
global $wp_registered_settings;
diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php
index e7ce2edb41..1dbac5e1d7 100644
--- a/src/wp-includes/pluggable.php
+++ b/src/wp-includes/pluggable.php
@@ -446,10 +446,10 @@ if ( ! function_exists( 'wp_mail' ) ) :
$phpmailer->addAddress( $address, $recipient_name );
break;
case 'cc':
- $phpmailer->addCc( $address, $recipient_name );
+ $phpmailer->addCC( $address, $recipient_name );
break;
case 'bcc':
- $phpmailer->addBcc( $address, $recipient_name );
+ $phpmailer->addBCC( $address, $recipient_name );
break;
case 'reply_to':
$phpmailer->addReplyTo( $address, $recipient_name );
@@ -2676,9 +2676,11 @@ if ( ! function_exists( 'wp_hash_password' ) ) :
* - `PASSWORD_ARGON2ID`
* - `PASSWORD_DEFAULT`
*
+ * The values of the algorithm constants are strings in PHP 7.4+ and integers in PHP 7.3 and earlier.
+ *
* @since 6.8.0
*
- * @param string $algorithm The hashing algorithm. Default is the value of the `PASSWORD_BCRYPT` constant.
+ * @param string|int $algorithm The hashing algorithm. Default is the value of the `PASSWORD_BCRYPT` constant.
*/
$algorithm = apply_filters( 'wp_hash_password_algorithm', PASSWORD_BCRYPT );
@@ -2688,12 +2690,14 @@ if ( ! function_exists( 'wp_hash_password' ) ) :
* The default hashing algorithm is bcrypt, but this can be changed via the {@see 'wp_hash_password_algorithm'}
* filter. You must ensure that the options are appropriate for the algorithm in use.
*
+ * The values of the algorithm constants are strings in PHP 7.4+ and integers in PHP 7.3 and earlier.
+ *
* @since 6.8.0
*
- * @param array $options Array of options to pass to the password hashing functions.
- * By default this is an empty array which means the default
- * options will be used.
- * @param string $algorithm The hashing algorithm in use.
+ * @param array $options Array of options to pass to the password hashing functions.
+ * By default this is an empty array which means the default
+ * options will be used.
+ * @param string|int $algorithm The hashing algorithm in use.
*/
$options = apply_filters( 'wp_hash_password_options', array(), $algorithm );
@@ -3048,6 +3052,8 @@ if ( ! function_exists( 'get_avatar' ) ) :
* - 'monsterid' (a monster)
* - 'wavatar' (a cartoon face)
* - 'identicon' (the "quilt", a geometric pattern)
+ * - 'initials' (initials based avatar with background color)
+ * - 'color' (generated background color)
* - 'mystery', 'mm', or 'mysteryman' (The Oyster Man)
* - 'blank' (transparent GIF)
* - 'gravatar_default' (the Gravatar logo)
diff --git a/src/wp-includes/plugin.php b/src/wp-includes/plugin.php
index bed67a9d96..5b4079b0bd 100644
--- a/src/wp-includes/plugin.php
+++ b/src/wp-includes/plugin.php
@@ -359,7 +359,7 @@ function remove_all_filters( $hook_name, $priority = false ) {
*
* @global string[] $wp_current_filter Stores the list of current filters with the current one last
*
- * @return string Hook name of the current filter.
+ * @return string|false Hook name of the current filter, false if no filter is running.
*/
function current_filter() {
global $wp_current_filter;
@@ -632,7 +632,7 @@ function remove_all_actions( $hook_name, $priority = false ) {
*
* @since 3.9.0
*
- * @return string Hook name of the current action.
+ * @return string|false Hook name of the current action, false if no action is running.
*/
function current_action() {
return current_filter();
diff --git a/src/wp-includes/post.php b/src/wp-includes/post.php
index 62960a6b0f..d9efb1e06a 100644
--- a/src/wp-includes/post.php
+++ b/src/wp-includes/post.php
@@ -1906,7 +1906,7 @@ function unregister_post_type( $post_type ) {
* Otherwise, an 's' will be added to the value for the plural form. After
* registration, capability_type will always be a string of the singular value.
*
- * By default, eight keys are accepted as part of the capabilities array:
+ * By default, the following keys are accepted as part of the capabilities array:
*
* - edit_post, read_post, and delete_post are meta capabilities, which are then
* generally mapped to corresponding primitive capabilities depending on the
@@ -1921,8 +1921,9 @@ function unregister_post_type( $post_type ) {
* - delete_posts - Controls whether objects of this post type can be deleted.
* - publish_posts - Controls publishing objects of this post type.
* - read_private_posts - Controls whether private objects can be read.
+ * - create_posts - Controls whether objects of this post type can be created.
*
- * These five primitive capabilities are checked in core in various locations.
+ * These primitive capabilities are checked in core in various locations.
* There are also six other primitive capabilities which are not referenced
* directly in core, except in map_meta_cap(), which takes the three aforementioned
* meta capabilities and translates them into one or more primitive capabilities
@@ -1948,7 +1949,25 @@ function unregister_post_type( $post_type ) {
* @see map_meta_cap()
*
* @param object $args Post type registration arguments.
- * @return object Object with all the capabilities as member variables.
+ * @return object {
+ * Object with all the capabilities as member variables.
+ *
+ * @type string $edit_post Capability to edit a post.
+ * @type string $read_post Capability to read a post.
+ * @type string $delete_post Capability to delete a post.
+ * @type string $edit_posts Capability to edit posts.
+ * @type string $edit_others_posts Capability to edit others' posts.
+ * @type string $delete_posts Capability to delete posts.
+ * @type string $publish_posts Capability to publish posts.
+ * @type string $read_private_posts Capability to read private posts.
+ * @type string $create_posts Capability to create posts.
+ * @type string $read Optional. Capability to read a post.
+ * @type string $delete_private_posts Optional. Capability to delete private posts.
+ * @type string $delete_published_posts Optional. Capability to delete published posts.
+ * @type string $delete_others_posts Optional. Capability to delete others' posts.
+ * @type string $edit_private_posts Optional. Capability to edit private posts.
+ * @type string $edit_published_posts Optional. Capability to edit published posts.
+ * }
*/
function get_post_type_capabilities( $args ) {
if ( ! is_array( $args->capability_type ) ) {
@@ -2589,6 +2608,8 @@ function get_posts( $args = null ) {
*
* Post meta data is called "Custom Fields" on the Administration Screen.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 1.5.0
*
* @param int $post_id Post ID.
@@ -2621,6 +2642,8 @@ function add_post_meta( $post_id, $meta_key, $meta_value, $unique = false ) {
* value, will keep from removing duplicate metadata with the same key. It also
* allows removing all metadata matching the key, if needed.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 1.5.0
*
* @param int $post_id Post ID.
@@ -2676,6 +2699,8 @@ function get_post_meta( $post_id, $key = '', $single = false ) {
*
* Can be used in place of add_post_meta().
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 1.5.0
*
* @param int $post_id Post ID.
@@ -4623,7 +4648,7 @@ function wp_insert_post( $postarr, $wp_error = false, $fire_after_hooks = true )
if ( $update || '0000-00-00 00:00:00' === $post_date ) {
$post_modified = current_time( 'mysql' );
- $post_modified_gmt = current_time( 'mysql', 1 );
+ $post_modified_gmt = current_time( 'mysql', true );
} else {
$post_modified = $post_date;
$post_modified_gmt = $post_date_gmt;
@@ -4849,6 +4874,15 @@ function wp_insert_post( $postarr, $wp_error = false, $fire_after_hooks = true )
}
}
+ /**
+ * Fires immediately before a new post is inserted in the database.
+ *
+ * @since 6.9.0
+ *
+ * @param array $data Array of unslashed post data.
+ */
+ do_action( 'pre_post_insert', $data );
+
if ( false === $wpdb->insert( $wpdb->posts, $data ) ) {
if ( $wp_error ) {
if ( 'attachment' === $post_type ) {
@@ -6075,7 +6109,7 @@ function get_page_by_path( $page_path, $output = OBJECT, $post_type = 'page' ) {
if ( false !== $cached ) {
// Special case: '0' is a bad `$page_path`.
if ( '0' === $cached || 0 === $cached ) {
- return;
+ return null;
} else {
return get_post( $cached, $output );
}
@@ -6843,7 +6877,9 @@ function wp_get_attachment_metadata( $attachment_id = 0, $unfiltered = false ) {
*
* @param int $attachment_id Attachment post ID.
* @param array $data Attachment meta data.
- * @return int|false False if $post is invalid.
+ * @return int|bool Whether the metadata was successfully updated.
+ * True on success, the Meta ID if the key didn't exist.
+ * False if $post is invalid, on failure, or if $data is the same as the existing metadata.
*/
function wp_update_attachment_metadata( $attachment_id, $data ) {
$attachment_id = (int) $attachment_id;
@@ -8134,6 +8170,10 @@ function wp_queue_posts_for_term_meta_lazyload( $posts ) {
* @param WP_Post $post Post object.
*/
function _update_term_count_on_transition_post_status( $new_status, $old_status, $post ) {
+ if ( $new_status === $old_status ) {
+ return;
+ }
+
// Update counts for the post's terms.
foreach ( (array) get_object_taxonomies( $post->post_type ) as $taxonomy ) {
$tt_ids = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'tt_ids' ) );
diff --git a/src/wp-includes/rest-api/class-wp-rest-response.php b/src/wp-includes/rest-api/class-wp-rest-response.php
index c6ea11be83..0861d190d0 100644
--- a/src/wp-includes/rest-api/class-wp-rest-response.php
+++ b/src/wp-includes/rest-api/class-wp-rest-response.php
@@ -43,7 +43,7 @@ class WP_REST_Response extends WP_HTTP_Response {
/**
* Adds a link to the response.
*
- * @internal The $rel parameter is first, as this looks nicer when sending multiple.
+ * {@internal The $rel parameter is first, as this looks nicer when sending multiple.}
*
* @since 4.4.0
*
@@ -135,7 +135,7 @@ class WP_REST_Response extends WP_HTTP_Response {
/**
* Sets a single link header.
*
- * @internal The $rel parameter is first, as this looks nicer when sending multiple.
+ * {@internal The $rel parameter is first, as this looks nicer when sending multiple.}
*
* @since 4.4.0
*
diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php
index b0ac65a647..767917d6f6 100644
--- a/src/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php
+++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-application-passwords-controller.php
@@ -802,7 +802,16 @@ class WP_REST_Application_Passwords_Controller extends WP_REST_Controller {
'app_id' => array(
'description' => __( 'A UUID provided by the application to uniquely identify it. It is recommended to use an UUID v5 with the URL or DNS namespace.' ),
'type' => 'string',
- 'format' => 'uuid',
+ 'oneOf' => array(
+ array(
+ 'type' => 'string',
+ 'format' => 'uuid',
+ ),
+ array(
+ 'type' => 'string',
+ 'enum' => array( '' ),
+ ),
+ ),
'context' => array( 'view', 'edit', 'embed' ),
),
'name' => array(
diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php
index 4b960d6c6b..0474613b2e 100644
--- a/src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php
+++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php
@@ -662,11 +662,11 @@ abstract class WP_REST_Controller {
/**
* Sanitizes the slug value.
*
- * @since 4.7.0
- *
- * @internal We can't use sanitize_title() directly, as the second
+ * {@internal We can't use sanitize_title() directly, as the second
* parameter is the fallback title, which would end up being set to the
- * request object.
+ * request object.}
+ *
+ * @since 4.7.0
*
* @see https://github.com/WP-API/WP-API/issues/1585
*
diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php
index 51c1ac29b8..908ebe4bcc 100644
--- a/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php
+++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php
@@ -88,7 +88,7 @@ class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
// Lists/updates a single global style variation based on the given id.
register_rest_route(
$this->namespace,
- '/' . $this->rest_base . '/(?P<id>[\/\w-]+)',
+ '/' . $this->rest_base . '/(?P<id>[\/\d+]+)',
array(
array(
'methods' => WP_REST_Server::READABLE,
@@ -96,9 +96,8 @@ class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
'permission_callback' => array( $this, 'get_item_permissions_check' ),
'args' => array(
'id' => array(
- 'description' => __( 'The id of a template' ),
- 'type' => 'string',
- 'sanitize_callback' => array( $this, '_sanitize_global_styles_callback' ),
+ 'description' => __( 'ID of global styles config.' ),
+ 'type' => 'integer',
),
),
),
@@ -115,17 +114,17 @@ class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
}
/**
- * Sanitize the global styles ID or stylesheet to decode endpoint.
+ * Sanitize the global styles stylesheet to decode endpoint.
* For example, `wp/v2/global-styles/twentytwentytwo%200.4.0`
* would be decoded to `twentytwentytwo 0.4.0`.
*
* @since 5.9.0
*
- * @param string $id_or_stylesheet Global styles ID or stylesheet.
- * @return string Sanitized global styles ID or stylesheet.
+ * @param string $stylesheet Global styles stylesheet.
+ * @return string Sanitized global styles stylesheet.
*/
- public function _sanitize_global_styles_callback( $id_or_stylesheet ) {
- return urldecode( $id_or_stylesheet );
+ public function _sanitize_global_styles_callback( $stylesheet ) {
+ return urldecode( $stylesheet );
}
/**
@@ -139,7 +138,7 @@ class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
protected function get_post( $id ) {
$error = new WP_Error(
'rest_global_styles_not_found',
- __( 'No global styles config exist with that id.' ),
+ __( 'No global styles config exists with that ID.' ),
array( 'status' => 404 )
);
@@ -464,7 +463,7 @@ class WP_REST_Global_Styles_Controller extends WP_REST_Posts_Controller {
'properties' => array(
'id' => array(
'description' => __( 'ID of global styles config.' ),
- 'type' => 'string',
+ 'type' => 'integer',
'context' => array( 'embed', 'view', 'edit' ),
'readonly' => true,
),
diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php
index 004f5851a2..f3c4295370 100644
--- a/src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php
+++ b/src/wp-includes/rest-api/endpoints/class-wp-rest-settings-controller.php
@@ -145,7 +145,19 @@ class WP_REST_Settings_Controller extends WP_REST_Controller {
public function update_item( $request ) {
$options = $this->get_registered_options();
- $params = $request->get_params();
+ $params = array_diff_key( $request->get_params(), $request->get_query_params() );
+
+ if ( empty( $params ) || ! empty( array_diff_key( $params, $options ) ) ) {
+ $message = empty( $params )
+ ? __( 'Request body cannot be empty.' )
+ : __( 'Invalid parameter(s) provided.' );
+
+ return new WP_Error(
+ 'rest_invalid_param',
+ $message,
+ array( 'status' => 400 )
+ );
+ }
foreach ( $options as $name => $args ) {
if ( ! array_key_exists( $name, $params ) ) {
diff --git a/src/wp-includes/script-loader.php b/src/wp-includes/script-loader.php
index c82c620ffe..cd2c06e4cc 100644
--- a/src/wp-includes/script-loader.php
+++ b/src/wp-includes/script-loader.php
@@ -396,7 +396,7 @@ function wp_default_packages_inline_scripts( $scripts ) {
"\n",
array(
'( function() {',
- ' var userId = ' . get_current_user_ID() . ';',
+ ' var userId = ' . get_current_user_id() . ';',
' var storageKey = "WP_DATA_USER_" + userId;',
' wp.data',
' .use( wp.data.plugins.persistence, { storageKey: storageKey } );',
@@ -997,8 +997,6 @@ function wp_default_scripts( $scripts ) {
// Not used in core, replaced by imgAreaSelect.
$scripts->add( 'jcrop', '/wp-includes/js/jcrop/jquery.Jcrop.min.js', array( 'jquery' ), '0.9.15' );
- $scripts->add( 'swfobject', '/wp-includes/js/swfobject.js', array(), '2.2-20120417' );
-
// Error messages for Plupload.
$uploader_l10n = array(
'queue_limit_exceeded' => __( 'You have attempted to queue too many files.' ),
@@ -1046,12 +1044,6 @@ function wp_default_scripts( $scripts ) {
$scripts->add( 'wp-plupload', "/wp-includes/js/plupload/wp-plupload$suffix.js", array( 'plupload', 'jquery', 'json2', 'media-models' ), false, 1 );
did_action( 'init' ) && $scripts->localize( 'wp-plupload', 'pluploadL10n', $uploader_l10n );
- // Keep 'swfupload' for back-compat.
- $scripts->add( 'swfupload', '/wp-includes/js/swfupload/swfupload.js', array(), '2201-20110113' );
- $scripts->add( 'swfupload-all', false, array( 'swfupload' ), '2201' );
- $scripts->add( 'swfupload-handlers', "/wp-includes/js/swfupload/handlers$suffix.js", array( 'swfupload-all', 'jquery' ), '2201-20110524' );
- did_action( 'init' ) && $scripts->localize( 'swfupload-handlers', 'swfuploadL10n', $uploader_l10n );
-
$scripts->add( 'comment-reply', "/wp-includes/js/comment-reply$suffix.js", array(), false, 1 );
did_action( 'init' ) && $scripts->add_data( 'comment-reply', 'strategy', 'async' );
@@ -1497,7 +1489,7 @@ function wp_default_scripts( $scripts ) {
$scripts->add( 'wp-color-picker', "/wp-admin/js/color-picker$suffix.js", array( 'iris' ), false, 1 );
$scripts->set_translations( 'wp-color-picker' );
- $scripts->add( 'dashboard', "/wp-admin/js/dashboard$suffix.js", array( 'jquery', 'admin-comments', 'postbox', 'wp-util', 'wp-a11y', 'wp-date' ), false, 1 );
+ $scripts->add( 'dashboard', "/wp-admin/js/dashboard$suffix.js", array( 'common', 'jquery', 'admin-comments', 'postbox', 'wp-util', 'wp-a11y', 'wp-date' ), false, 1 );
$scripts->set_translations( 'dashboard' );
$scripts->add( 'list-revisions', "/wp-includes/js/wp-list-revisions$suffix.js" );
diff --git a/src/wp-includes/taxonomy.php b/src/wp-includes/taxonomy.php
index 3e235b780f..935212652c 100644
--- a/src/wp-includes/taxonomy.php
+++ b/src/wp-includes/taxonomy.php
@@ -1292,6 +1292,8 @@ function get_term_to_edit( $id, $taxonomy ) {
*
* Prior to 4.5.0, taxonomy was passed as the first parameter of `get_terms()`.
*
+ * {@internal The `$deprecated` parameter is parsed for backward compatibility only.}
+ *
* @since 2.3.0
* @since 4.2.0 Introduced 'name' and 'childless' parameters.
* @since 4.4.0 Introduced the ability to pass 'term_id' as an alias of 'id' for the `orderby` parameter.
@@ -1301,8 +1303,6 @@ function get_term_to_edit( $id, $taxonomy ) {
* Introduced 'meta_key' and 'meta_value' parameters. Introduced the ability to order results by metadata.
* @since 4.8.0 Introduced 'suppress_filter' parameter.
*
- * @internal The `$deprecated` parameter is parsed for backward compatibility only.
- *
* @param array|string $args Optional. Array or string of arguments. See WP_Term_Query::__construct()
* for information on accepted arguments. Default empty array.
* @param array|string $deprecated Optional. Argument array, when using the legacy function parameter format.
@@ -1382,6 +1382,8 @@ function get_terms( $args = array(), $deprecated = '' ) {
/**
* Adds metadata to a term.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 4.4.0
*
* @param int $term_id Term ID.
@@ -1409,6 +1411,8 @@ function add_term_meta( $term_id, $meta_key, $meta_value, $unique = false ) {
/**
* Removes metadata matching criteria from a term.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 4.4.0
*
* @param int $term_id Term ID.
@@ -1455,6 +1459,8 @@ function get_term_meta( $term_id, $key = '', $single = false ) {
*
* If the meta field for the term does not exist, it will be added.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 4.4.0
*
* @param int $term_id Term ID.
@@ -1927,11 +1933,11 @@ function sanitize_term_field( $field, $value, $term_id, $taxonomy, $context ) {
*
* Default $args is 'hide_empty' which can be 'hide_empty=true' or array('hide_empty' => true).
*
+ * {@internal The `$deprecated` parameter is parsed for backward compatibility only.}
+ *
* @since 2.3.0
* @since 5.6.0 Changed the function signature so that the `$args` array can be provided as the first parameter.
*
- * @internal The `$deprecated` parameter is parsed for backward compatibility only.
- *
* @param array|string $args Optional. Array or string of arguments. See WP_Term_Query::__construct()
* for information on accepted arguments. Default empty array.
* @param array|string $deprecated Optional. Argument array, when using the legacy function parameter format.
@@ -2137,11 +2143,11 @@ function wp_delete_term( $term, $taxonomy, $args = array() ) {
)
);
- if ( 1 === count( $terms ) && isset( $default ) ) {
+ if ( 1 === count( $terms ) ) {
$terms = array( $default );
} else {
$terms = array_diff( $terms, array( $term ) );
- if ( isset( $default ) && isset( $force_default ) && $force_default ) {
+ if ( isset( $force_default ) && $force_default ) {
$terms = array_merge( $terms, array( $default ) );
}
}
@@ -4892,11 +4898,13 @@ function is_object_in_term( $object_id, $taxonomy, $terms = null ) {
if ( is_wp_error( $object_terms ) ) {
return $object_terms;
}
+
if ( empty( $object_terms ) ) {
return false;
}
+
if ( empty( $terms ) ) {
- return ( ! empty( $object_terms ) );
+ return true;
}
$terms = (array) $terms;
diff --git a/src/wp-includes/theme.json b/src/wp-includes/theme.json
index 641c379557..85836d6c24 100644
--- a/src/wp-includes/theme.json
+++ b/src/wp-includes/theme.json
@@ -65,7 +65,7 @@
"gradients": [
{
"name": "Vivid cyan blue to vivid purple",
- "gradient": "linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%)",
+ "gradient": "linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%)",
"slug": "vivid-cyan-blue-to-vivid-purple"
},
{
@@ -75,12 +75,12 @@
},
{
"name": "Luminous vivid amber to luminous vivid orange",
- "gradient": "linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%)",
+ "gradient": "linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%)",
"slug": "luminous-vivid-amber-to-luminous-vivid-orange"
},
{
"name": "Luminous vivid orange to vivid red",
- "gradient": "linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%)",
+ "gradient": "linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%)",
"slug": "luminous-vivid-orange-to-vivid-red"
},
{
@@ -251,12 +251,12 @@
{
"name": "Outlined",
"slug": "outlined",
- "shadow": "6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1)"
+ "shadow": "6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0)"
},
{
"name": "Crisp",
"slug": "crisp",
- "shadow": "6px 6px 0px rgba(0, 0, 0, 1)"
+ "shadow": "6px 6px 0px rgb(0, 0, 0)"
}
]
},
diff --git a/src/wp-includes/theme.php b/src/wp-includes/theme.php
index b4a71d855a..0727086aee 100644
--- a/src/wp-includes/theme.php
+++ b/src/wp-includes/theme.php
@@ -4349,6 +4349,8 @@ function create_initial_theme_features() {
*
* @since 5.9.0
*
+ * @global string[] $wp_theme_directories
+ *
* @return bool Whether the active theme is a block-based theme or not.
*/
function wp_is_block_theme() {
diff --git a/src/wp-includes/user.php b/src/wp-includes/user.php
index 1e15b4b0ce..60da3d2831 100644
--- a/src/wp-includes/user.php
+++ b/src/wp-includes/user.php
@@ -477,7 +477,7 @@ function wp_authenticate_application_password(
*/
do_action( 'wp_authenticate_application_password_errors', $error, $user, $item, $password );
- if ( is_wp_error( $error ) && $error->has_errors() ) {
+ if ( $error->has_errors() ) {
/** This action is documented in wp-includes/user.php */
do_action( 'application_password_failed_authentication', $error );
@@ -637,7 +637,7 @@ function count_user_posts( $userid, $post_type = 'post', $public_only = false )
* @since 4.1.0 Added `$post_type` argument.
* @since 4.3.1 Added `$public_only` argument.
*
- * @param int $count The user's post count.
+ * @param string $count The user's post count as a numeric string.
* @param int $userid User ID.
* @param string|array $post_type Single post type or array of post types to count the number of posts for.
* @param bool $public_only Whether to limit counted posts to public posts.
@@ -1126,7 +1126,7 @@ function get_blogs_of_user( $user_id, $all = false ) {
* @param object[] $sites An array of site objects belonging to the user.
* @param int $user_id User ID.
* @param bool $all Whether the returned sites array should contain all sites, including
- * those marked 'deleted', 'archived', or 'spam'. Default false.
+ * those flagged for deletion, archived, or marked as spam.
*/
return apply_filters( 'get_blogs_of_user', $sites, $user_id, $all );
}
@@ -1202,6 +1202,8 @@ function is_user_member_of_blog( $user_id = 0, $blog_id = 0 ) {
/**
* Adds meta data to a user.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 3.0.0
*
* @param int $user_id User ID.
@@ -1228,6 +1230,8 @@ function add_user_meta( $user_id, $meta_key, $meta_value, $unique = false ) {
* value, will keep from removing duplicate metadata with the same key. It also
* allows removing all metadata matching key, if needed.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 3.0.0
*
* @link https://developer.wordpress.org/reference/functions/delete_user_meta/
@@ -1279,6 +1283,8 @@ function get_user_meta( $user_id, $key = '', $single = false ) {
*
* If the meta field for the user does not exist, it will be added.
*
+ * For historical reasons both the meta key and the meta value are expected to be "slashed" (slashes escaped) on input.
+ *
* @since 3.0.0
*
* @link https://developer.wordpress.org/reference/functions/update_user_meta/
@@ -2280,7 +2286,10 @@ function wp_insert_user( $userdata ) {
*/
$user_nicename = apply_filters( 'pre_user_nicename', $user_nicename );
- if ( mb_strlen( $user_nicename ) > 50 ) {
+ // Check if the sanitized nicename is empty.
+ if ( empty( $user_nicename ) ) {
+ return new WP_Error( 'empty_user_nicename', __( 'Cannot create a user with an empty nicename.' ) );
+ } elseif ( mb_strlen( $user_nicename ) > 50 ) {
return new WP_Error( 'user_nicename_too_long', __( 'Nicename may not be longer than 50 characters.' ) );
}
@@ -3172,7 +3181,7 @@ function retrieve_password( $user_login = '' ) {
$user_data = false;
// Use the passed $user_login if available, otherwise use $_POST['user_login'].
- if ( ! $user_login && ! empty( $_POST['user_login'] ) ) {
+ if ( ! $user_login && ! empty( $_POST['user_login'] ) && is_string( $_POST['user_login'] ) ) {
$user_login = $_POST['user_login'];
}
diff --git a/src/wp-includes/version.php b/src/wp-includes/version.php
index 324ee3279f..3b43518692 100644
--- a/src/wp-includes/version.php
+++ b/src/wp-includes/version.php
@@ -33,7 +33,7 @@ $wp_db_version = 58975;
$tinymce_version = '49110-20201110';
/**
- * Holds the required PHP version.
+ * Holds the minimum required PHP version.
*
* @global string $required_php_version
*/
@@ -50,7 +50,7 @@ $required_php_extensions = array(
);
/**
- * Holds the required MySQL version.
+ * Holds the minimum required MySQL version.
*
* @global string $required_mysql_version
*/
diff --git a/src/wp-includes/widgets/class-wp-widget-media-gallery.php b/src/wp-includes/widgets/class-wp-widget-media-gallery.php
index ecc446c221..a2527a6554 100644
--- a/src/wp-includes/widgets/class-wp-widget-media-gallery.php
+++ b/src/wp-includes/widgets/class-wp-widget-media-gallery.php
@@ -240,7 +240,6 @@ class WP_Widget_Media_Gallery extends WP_Widget_Media {
* Whether the widget has content to show.
*
* @since 4.9.0
- * @access protected
*
* @param array $instance Widget instance props.
* @return bool Whether widget has content.
diff --git a/src/wp-login.php b/src/wp-login.php
index 0d824dea65..4900834447 100644
--- a/src/wp-login.php
+++ b/src/wp-login.php
@@ -479,7 +479,7 @@ function wp_login_viewport_meta() {
* Check the request and redirect or display a form based on the current action.
*/
-$action = isset( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
+$action = isset( $_REQUEST['action'] ) && is_string( $_REQUEST['action'] ) ? $_REQUEST['action'] : 'login';
$errors = new WP_Error();
if ( isset( $_GET['key'] ) ) {
diff --git a/src/wp-settings.php b/src/wp-settings.php
index f5a0929db8..60ffc307c5 100644
--- a/src/wp-settings.php
+++ b/src/wp-settings.php
@@ -25,9 +25,9 @@ define( 'WPINC', 'wp-includes' );
* @global string $wp_version The WordPress version string.
* @global int $wp_db_version WordPress database version.
* @global string $tinymce_version TinyMCE version.
- * @global string $required_php_version The required PHP version string.
+ * @global string $required_php_version The minimum required PHP version string.
* @global string[] $required_php_extensions The names of required PHP extensions.
- * @global string $required_mysql_version The required MySQL version string.
+ * @global string $required_mysql_version The minimum required MySQL version string.
* @global string $wp_local_package Locale code of the package.
*/
global $wp_version, $wp_db_version, $tinymce_version, $required_php_version, $required_php_extensions, $required_mysql_version, $wp_local_package;
@@ -35,7 +35,7 @@ require ABSPATH . WPINC . '/version.php';
require ABSPATH . WPINC . '/compat.php';
require ABSPATH . WPINC . '/load.php';
-// Check for the required PHP version and for the MySQL extension or a database drop-in.
+// Check the server requirements.
wp_check_php_mysql_versions();
// Include files required for initialization.