| 开发者 |
palasthotel
greatestview |
|---|---|
| 更新时间 | 2026年8月3日 23:44 |
| 捐献地址: | 去捐款 |
| PHP版本: | 5.4 及以上 |
| WordPress版本: | 7.0.2 |
| 版权: | GPL-3.0-or-later |
| 版权网址: | 版权信息 |
DOMDocument::loadHTML() statically, which PHP 8 rejects. Any site
that actually configured the filter has been showing "There has been a critical
error on this website" since its PHP 8 upgrade. Sites that installed the plugin
without configuring the filter were unaffected, because it does nothing until a
handle is passed to it.
What to do instead
If you wrote the script yourself, do not inline the file — write the code inline
in the first place. WordPress has supported that since 4.5:
wp_add_inline_script( 'my-handle', 'if (!("localStorage" in window)) { /* ... */ }', 'before' );
or, for code that has to run before anything else paints, print it in wp_head
directly. Both are simpler than routing a file through a plugin, and neither
breaks a Content Security Policy the way an inlined file does — this plugin sets
neither a nonce nor a hash, so a strict script-src blocks its output.
For a script you do not control there is no drop-in replacement, and our older
Inline JavaScript in Head plugin is not one either — it was deprecated in 2020 in
favour of this plugin, so both are dead ends now. What is left is to dequeue the
foreign script yourself and re-add its content inline:
add_action( 'wp_enqueue_scripts', function () { $handle = 'some-foreign-handle'; $src = wp_scripts()->registered[ $handle ]->src ?? null; if ( ! $src ) { return; } $path = ABSPATH . ltrim( wp_make_link_relative( $src ), '/' ); if ( ! is_readable( $path ) ) { return; } wp_dequeue_script( $handle ); wp_add_inline_script( 'some-handle-you-own', file_get_contents( $path ) ); }, 20 );
That is roughly what this plugin did, minus the URL-to-path guessing — you decide
how the file is located, so it cannot break on a subdirectory install or a CDN.
Why it is being retired
The benefit it was written for has largely gone. Under HTTP/2 and HTTP/3 requests
are multiplexed, so the per-file cost that made inlining worthwhile is mostly
gone, and inlining still costs you browser caching — the code travels with every
single HTML response. What remains is a narrow case: inlining a file you cannot
edit. That is not enough to keep a plugin for.
How it used to work
In some critical cases you cannot wait for a JavaScript file to load. Then you can benefit from better performance, if you embed the JavaScript code directly into the <script> tag. This is where this plugin comes in: It provides a filter embed_javascript_file_content_handles, which takes JavaScript handles and echos their code content into the DOM instead of linking to a file.
Please beware that placing lots of embedded JavaScript code can be critical! First you lose caching benefits and second the document size can increase easily. A general rule of thumb is that you should only consider JavaScript files for inline placement, which are critical and which have a file size lower than ~500 Bytes.
Example
`
add_action( 'wp_enqueue_scripts', 'my_scripts' );
function my_scripts() {
// Some critical script is enqueued
wp_enqueue_script( 'js-detection', get_template_directory_uri() . '/js/js-detection.js' );
}
/**
embed_javascript_file_content_handles filter from your
theme or plugin, then deactivate and delete the plugin. It stores no options and
creates no database tables, so nothing is left behind.