Opened 9 months ago
Closed 7 months ago
#60065 closed defect (bug) (duplicate)
Update Icons Retrieval in update-core.php for Plugin Updates
Reported by: | tomsnunes | Owned by: | tomsnunes |
---|---|---|---|
Milestone: | Priority: | normal | |
Severity: | normal | Version: | 6.4.2 |
Component: | Upgrade/Install | Keywords: | |
Focuses: | Cc: |
Description
WordPress version 6.4.2 seems to have a bug that is not allowing plugins to be listed on wp-admin/update-core.php page.
Apache Error Log
[proxy_fcgi:error] [pid 470:tid 140131151341120] [client 2804:90:4000:f275:4145:c03f:530:4536:0] AH01071: Got error 'PHP message: PHP Fatal error: Uncaught Error: Cannot use object of type stdClass as array in /var/www/site/wordpress/wp-admin/update-core.php:520\nStack trace:\n#0 /var/www/site/wordpress/wp-admin/update-core.php(1118): list_plugin_updates()\n#1 {main}\n thrown in /var/www/site/wordpress/wp-admin/update-core.php on line 520', referer: https://site/wp-admin/update-core.php
The error message indicates that there is an issue in the update-core.php file at line 520. The specific error is "Cannot use object of type stdClass as array." This suggests that there is an attempt to use an object as if it were an array on that line.
Looking at the provided code snippet, the relevant part is:
<?php $plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true );
Here, $plugin_data is being cast to an object using (object).
Later in the code, you are trying to access properties of $plugin_data as if it were an array:
<?php $icon = '<img src="' . esc_url( $plugin_data->update->icons[ $preferred_icon ] ) . '" alt="" />';
If update is supposed to be an array and not an object, you might want to adjust how $plugin_data is handled.
Here's a modified version that assumes $plugin_data->update is an array:
<?php $plugin_data = (object) _get_plugin_data_markup_translate( $plugin_file, (array) $plugin_data, false, true ); $icon = '<span class="dashicons dashicons-admin-plugins"></span>'; $preferred_icons = array( 'svg', '2x', '1x', 'default' ); // Assuming $plugin_data->update is an array $update_icons = (array) $plugin_data->update; foreach ( $preferred_icons as $preferred_icon ) { if ( ! empty( $update_icons[ $preferred_icon ] ) ) { $icon = '<img src="' . esc_url( $update_icons[ $preferred_icon ] ) . '" alt="" />'; break; } }
This modification ensures that $plugin_data->update is cast to an array before trying to access its elements.
Hi @tomsnunes, welcome to Trac and thanks for opening this ticket!
We have a discussion about this in #56431. Let's continue the discussion there. 🙂