Viewing 2 posts - 1 through 2 (of 2 total)

We ran into a reproducible issue with the Newsmag theme (tagDiv Composer) when importing a demo on PHP 8.2.
Symptoms:
tagDiv Importer stops with error:
Fatal error: Uncaught TypeError: Cannot access offset of type string on string in td_demo_util.php
Log also shows Undefined variable $sidebars_widgets and Automatic conversion of false to array is deprecated.
Root cause:
In td_demo_widgets::add_widget_to_sidebar(), the code uses $sidebars_widgets before it’s retrieved from get_option(‘sidebars_widgets’) and normalised.
PHP 8.x is stricter about this than PHP 7.x — in PHP 7 it silently converted null/false to array; in PHP 8 it throws a fatal error.
Workaround:
Patch the function to fetch and normalise $sidebars_widgets before using it. Here’s a minimal fix:
static function add_widget_to_sidebar($sidebar_id, $widget_name, $atts) {
$tmp_sidebars = td_options::get_array('sidebars');
if (empty($tmp_sidebars)) {
$tmp_sidebars = array();
}
if (!in_array('td-' . $sidebar_id, self::$hard_coded_sidebars) &&
!in_array($sidebar_id, $tmp_sidebars)
) {
self::kill(__CLASS__, __FUNCTION__,
'No sidebar with the name provided! - td-' . $sidebar_id,
array_merge(self::$hard_coded_sidebars, $tmp_sidebars)
);
}
// Normalise $atts
if (!is_array($atts)) {
if (is_string($atts)) {
$tmp = json_decode($atts, true);
$atts = is_array($tmp) ? $tmp : array();
} else {
$atts = array();
}
}
// FIX: Get and normalise $sidebars_widgets BEFORE using
$sidebars_widgets = get_option('sidebars_widgets');
if (!is_array($sidebars_widgets)) {
$sidebars_widgets = array();
}
$sb_key = 'td-' . td_util::sidebar_name_to_id($sidebar_id);
if (!isset($sidebars_widgets[$sb_key]) || !is_array($sidebars_widgets[$sb_key])) {
$sidebars_widgets[$sb_key] = array();
}
// Normalise widget instances
$opt_key = 'widget_' . $widget_name;
$widget_instances = get_option($opt_key);
if (!is_array($widget_instances)) {
$widget_instances = array();
}
// Add instance
$widget_instances[self::$last_widget_instance] = $atts;
update_option($opt_key, $widget_instances);
// Assign widget to sidebar
$sidebars_widgets[$sb_key][self::$last_sidebar_widget_position] =
$widget_name . '-' . self::$last_widget_instance;
update_option('sidebars_widgets', $sidebars_widgets);
self::$last_sidebar_widget_position++;
self::$last_widget_instance++;
}
Notes:
Tested on PHP 8.2.29 with Plesk Obsidian and Newsmag 5.4.3.3.
This patch allows the demo importer to complete successfully without downgrading PHP.
The EXIF warnings you may see in logs during import are unrelated and non-fatal.
If tagDiv devs see this — moving the $sidebars_widgets = get_option(‘sidebars_widgets’) block up in the function would resolve this for all PHP 8+ users.
Hi,
My php is 8.3, running on Cyberpanel and mariasql.
Tried uploading and overwriting all files in the mentioned paths, but did not solve anything.
Caching was not yet enabled.
Thank you so much for your input.
| Cookie | Duration | Description |
|---|---|---|
| cookielawinfo-checkbox-advertisement | 1 year | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Advertisement". |
| cookielawinfo-checkbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
| cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
| cookielawinfo-checkbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
| cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
| cookielawinfo-checkbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
| cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
| viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
| viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
| Cookie | Duration | Description |
|---|---|---|
| _ga | 2 years | This cookie is installed by Google Analytics. The cookie is used to calculate visitor, session, campaign data and keep track of site usage for the site's analytics report. The cookies store information anonymously and assign a randomly generated number to identify unique visitors. |
| _gat_gtag_UA_43963494_1 | 1 minute | This cookie is set by Google and is used to distinguish users. |
| _gid | 1 day | This cookie is installed by Google Analytics. The cookie is used to store information of how visitors use a website and helps in creating an analytics report of how the website is doing. The data collected including the number visitors, the source where they have come from, and the pages visted in an anonymous form. |
| Cookie | Duration | Description |
|---|---|---|
| IDE | 1 year 24 days | Used by Google DoubleClick and stores information about how the user uses the website and any other advertisement before visiting the website. This is used to present users with ads that are relevant to them according to the user profile. |
| test_cookie | 15 minutes | This cookie is set by doubleclick.net. The purpose of the cookie is to determine if the user's browser supports cookies. |
| VISITOR_INFO1_LIVE | 5 months 27 days | This cookie is set by Youtube. Used to track the information of the embedded YouTube videos on a website. |
| YSC | session | This cookies is set by Youtube and is used to track the views of embedded videos. |
| Cookie | Duration | Description |
|---|---|---|
| CONSENT | 16 years 5 months 26 days 13 hours 25 minutes | No description |
| yt-remote-connected-devices | never | This cookies is set by Youtube and stores the user's video player preferences using embedded YouTube video. |
| yt-remote-device-id | never | This cookies is set by Youtube and stores the user's video player preferences using embedded YouTube video. |