#52842 closed defect (bug) (fixed)
No way to adjust attributes in wp_resource_hints()
Reported by: | vanyukov | Owned by: | SergeyBiryukov |
---|---|---|---|
Milestone: | 5.8 | Priority: | normal |
Severity: | minor | Version: | |
Component: | Script Loader | Keywords: | has-patch |
Focuses: | docs | Cc: |
Description
Not sure if this is a bug or an improvement.
In wp_resource_hints()
we're checking for valid attributes:
<?php if ( ! is_scalar( $value ) || ( ! in_array( $attr, array( 'as', 'crossorigin', 'href', 'pr', 'rel', 'type' ), true ) && ! is_numeric( $attr ) ) ) { continue; }
but there's no way to define those attributes, because the only ones that are being set are rel
and href
:
<?php $atts['rel'] = $relation_type; $atts['href'] = $url;
Can we add a filter to allow modifying all these attributes?
Change History (14)
#2
@
4 years ago
It was a while ago so this is stretching the memory, I think the theory was to limit attributes to those defined in the spec.
If the URL is passed as an array that includes the other attributes, then you should be able to add them https://core.trac.wordpress.org/browser/tags/5.7.1/src/wp-includes/general-template.php?marks=3300-3306#L3300
Are you wishing to include other attributes in the link
tag or having trouble setting those that are defined as permitted?
#3
@
4 years ago
@desrosj,
This can be closed. I was wrong. Sorry.
I assumed that $urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );
accepted only a list of URLs, as per the parameter description @param array $urls URLs to print for resource hints.
.
Maybe adjust the param description, to show that it accepts not only the links, but also the attributes?
#4
@
4 years ago
- Focuses docs added
- Keywords reporter-feedback removed
Thanks for the reply.
You're right, the documentation could be improved so this ticket can stay open to do that. It looks like the docs weren't updated when the $url
parameter was changed to accept attributes rather than just the URL.
@param array[] Array of resources to be hinted and their attributes { @item string $url URL to include in resource hints @item string $as How the browser should treat the asset (CSS, JavaScript, etc) // etc, etc }
This ticket was mentioned in PR #1283 on WordPress/wordpress-develop by Rahmon.
4 years ago
#6
- Keywords has-patch added; needs-patch removed
This change tries to improve the documentation of $url
param in the wp_resource_hints
filter.
Trac ticket: https://core.trac.wordpress.org/ticket/52842
#7
@
4 years ago
Hi @vanyukov and @peterwilsoncc
I've tried to improve the documentation of the $url parameter. I would appreciate any feedback from you.
#8
@
4 years ago
@Rahmohn ,
I would probably use the PHP Documentation Standards, and at least change string[]|array[]
to string|array
.
#9
@
4 years ago
Thanks for the feedback @vanyukov. I've updated the PR to:
/** * ... * @param array $urls Resources to be hinted { * String of URLs or array of resources and their attributes. * * @type string $as How the browser should treat the asset (CSS, JavaScript, etc). * @type string $crossorigin How the element handles crossorigin requests. * @type string $href URL to include in resource hints. * @type float $pr Expected probability that the resource will be used. * @type string $rel Relationship between the resource and the current document. * @type string $type Type of the resource (text/html, text/css, etc). * * }
#13
@
4 years ago
Thanks for the PR!
For reference, just noting that even though rel
is in the list of allowed attributes, it was not included in [51048], since it always has the value of $relation_type, based on the list of predefined values, and cannot really be changed via the filter.
For that reason, it was also not mentioned in the Attributes for Resource Hints in 4.7 dev note.
@vanyukov Could you expand on your use case or what exactly you are seeing vs. what you are expecting?
Are you saying that URLs with the allowed attributes are not being displayed with these attributes? There are some tests that assert the
pr
,rel
,as
andhref
attributes are shown correctly, bot none fortype
orcrossorigin
.I believe that it was an intentional decision to not allow this list to be modified. @swissspidy, @peterwilsoncc, or @ocean90 may be able to confirm.
Some history is found in #38121, #34292.