Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Media rename and video block break on WordPress below 6.2, although the plugin says it requires 5.5

Đang mở
#1,201 1 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@girishpanchal30 đang làm issue này rồi.

Từ ngày 28/10/2026.

Đánh giá

Issue này chưa được đánh giá.

Mô tả

bug
Description

The readme says Requires at least: 5.5, but a few features use core APIs that do not exist on older versions:

  1. Rename / Replace file (WP < 6.2). Optml_Attachment_Db_Renamer builds every query with the %i identifier placeholder, which $wpdb->prepare() only understands from WP 6.2. On 5.5 to 6.1, %i is left as plain text, so the SQL reaching MySQL is literally DESCRIBE %i (a syntax error). get_columns() gets no rows, so every table is skipped and replace() returns 0. The file and its sizes are still moved on disk, so posts keep pointing at the old file URL and the image is likely broken. No error is shown to the user.
  2. Optimole Video Player block (WP 5.5). render_video_player_block() calls get_block_wrapper_attributes(), added in WP 5.6. On 5.5, a connected site that renders a post with this block hits Call to undefined function get_block_wrapper_attributes().
  3. Dashboard widget (WP < 6.2). assets/src/widget/index.js uses createRoot from @wordpress/element, which core only ships from WP 6.2 (React 18). On older versions the script throws and the widget stays stuck on the skeleton loader.

Also, wp_cache_flush_group() (WP 6.1) in PageProfiler/Storage/ObjectCache::delete_all() is not guarded, but nothing calls delete_all() in 4.2.17, so it has no effect today.

Expected: either raise Requires at least to 6.2 (simplest, since 1 and 3 both need it), or guard each call (for example, check $wpdb->has_cap( 'identifier_placeholders' ) and fall back to backtick-quoting the identifier, check function_exists( 'get_block_wrapper_attributes' ), and fall back to render() when createRoot is missing).

The bundled Themeisle SDK and symfony/polyfill-php80 do not raise the floor: their newer calls are guarded or polyfilled.

Step-by-step reproduction instructions

Rename (no Optimole account needed):

  1. On a test site, install WordPress 6.1 (wp core download --version=6.1.7) with PHP 7.4 to 8.1, and set WP_DEBUG and WP_DEBUG_LOG to true.
  2. wp plugin install optimole-wp --version=4.2.17 --activate
  3. ID=$(wp media import ./test.jpg --porcelain) then URL=$(wp eval "echo wp_get_attachment_url($ID);")
  4. wp post create --post_status=publish --post_title="Rename test" --post_content="<img src=\"$URL\">"
  5. In wp-admin, go to Media > Library, open the image's edit screen, enter renamed-test in Rename attached file, and click Update.
  6. Run wp db query "SELECT ID FROM $(wp db prefix)posts WHERE post_content LIKE '%renamed-test%'". It returns nothing. The post still uses the old URL, the old file is gone from uploads/, and the image is broken on the front end.
  7. debug.log shows wpdb::prepare was called incorrectly ... placeholders (0) for the number of arguments passed (1) and WordPress database error ... for query DESCRIBE %i.
  8. Repeat on WordPress 6.2 or later. The post content is updated to renamed-test.jpg.

Shorter check: on 6.1, wp eval 'var_dump( ( new Optml_Attachment_Db_Renamer( true ) )->replace( "<old url>", "<new url>" ) );' prints int(0) even when posts contain <old url>.

The prepare() behaviour can also be reproduced with plain PHP. This copies the 5.5 to 6.1 regex steps and gives:

WP 5.5-6.1 prepare('DESCRIBE %i', 'wp_posts')
  notice : _doing_it_wrong: The query does not contain the correct number of placeholders (0) for the number of arguments passed (1).
  SQL    : DESCRIBE %i

Video block (WordPress 5.5, PHP 7.4): on a site connected to Optimole (the block is only registered when connected), run wp post create --post_status=publish --post_title="Video test" --post_content='<!-- wp:optimole/video-player /-->' and open the post. You get a fatal error. Without an account: wp eval 'echo ( new Optml_Video_Player() )->render_video_player_block( [], "", null );' gives the same fatal error.

Dashboard widget (WordPress 6.1): on a connected site where the widget shows, open Dashboard. The console shows createRoot is not a function. Running typeof wp.element.createRoot returns "undefined".

Screenshots, screen recording, code snippet or Help Scout ticket
Environment info

Optimole 4.2.17 (the same code is on master and development). Rename/Replace and the widget fail on WordPress 5.5 to 6.1. The video block fails on WordPress 5.5. Any PHP version from 7.4 that those WordPress versions support.

Is the issue you are reporting a regression

No. The same code has been there since 4.0.0, when Requires at least was already 5.5.

Found while writing the WordPress compatibility checks for Optimole.

Ngôn ngữ chính
PHP
Star
74
Fork
14
Merge trung bình
1 ngày 23 giờ
Pull request đã merge (30 ngày)
28

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của Codeinwp/optimole-wp

Tất cả issue của Codeinwp/optimole-wp

Issue tương tự

Thêm issue về PHP

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.