PluginUs.Net - Business Tools for WooCommerce and WordPress

[realize your idea - make your dreams come true]
Botoscope is currently in early access

Support Forum

You need to log-in to create request (topic) to the support

no changes on bulk edit of the product description

The support doesn work on Saturdays and Sundays, so some Friday requests can be answered on Monday. If you have problems with registration ask help on contact us page please
If you not got email within 24~36 business hours, firstly check your spam box, and if no any email from the support there - back to the forum and read answer here. DO NOT ANSWER ON EMAILS [noreply@pluginus.net] FROM THE FORUM!! Emails are just for your info, all answers should be published only here.
The support doesn work on Saturdays and Sundays, so some Friday requests can be answered on Monday.
12

hi i changed the description on 14 products at the same time and bear says its changed. also if i click in the description of every product the change is made but if i look at the product on the website the

text is still the old one. i use elementor pro as well, cleaned cache but still the change is not online. can you please give me a hint? thanks, chris

Hello Chris

The change is saved correctly, BEAR writes to the standard WooCommerce product description field and you confirmed it is there when you open each product. This is an Elementor display issue, not a BEAR issue.

Elementor Pro builds its own cached page templates and sometimes the product page layout does not pull from the live WooCommerce description field, or the old version is cached at the Elementor level rather than the site cache level.

Please try the following:

Go to Elementor > Tools and click Regenerate CSS & Data (or Regenerate Files). This clears Elementor's own internal cache which is separate from your site cache.

After that, check one of the product pages again. If the updated description still does not show, open that product in the Elementor editor and check whether the description widget on the template is actually pulling from the WooCommerce Description field, or whether someone has typed the text directly as static content inside the Elementor block. If it is static text, Elementor will never reflect changes made through WooCommerce or BEAR.

Also, could you clarify which cache exactly you cleared? Elementor Pro has its own internal cache that is separate from any caching plugin you may have on your site. Clearing the cache through WP Rocket, LiteSpeed, or any other caching plugin will not clear Elementor's internal cache. To do that you need to go to Elementor > Tools and use the Regenerate CSS & Data option there.

Let me know what you find.

p.s. If you are still stuck after trying the above, feel free to add a temporary WordPress admin login to the private data area of this ticket and I will take a look directly. If this is a live production site please make a backup first, or better yet create a clone using the Duplicator plugin and share access to the clone instead.

hi alex

thanks a lot for the help, yes i already cleared the elementor pro cache as well, didnt help. if i ask chatgpt it says that the data is stored in another table if you use elementor pro. would be great to implement that feature/table so you can also edit products which are built with elementor. you can login: https://paragliding-academy.com/wp-admin/

[removed]

thanks,

chris

Hello Chris

I did test and all is works, here is video: https://share.pluginus.net/video/v20260514120144.mp4 ('test here' was then removed, do not worry)

If I misunderstood you please create video of what you do and where is fail

Also, change the password please of the account you provided, as you published it here on publick forum, use only private data of this ticket

Also share please actual purchase code in the private area of this ticket

https://share.pluginus.net/image/i20230222134241.png
https://share.pluginus.net/image/i20230222134615.png
https://share.pluginus.net/image/i20230222134511.png

hi alex

thanks a lot for testing. yes this product works because it was not build with elementor. the courses like this one: https://paragliding-academy.com/produkt/gleitschirm-grundkurs-gk14-03-10-2026-07-10-2026/

are build with elementor and they dont change. chatgpt says that elementor safes the date in a different table: _postmeta → _elementor_data

and it should be possible to change these field with bulk editor too, no?

thanks a lot for the help,

chris

Hello Chris

The reason BEAR changes do not appear on your Elementor-built product pages is the following. Elementor Pro stores the entire page layout including all text content as a large JSON structure https://clip2net.com/s/4nYRkkr in a custom meta field called _elementor_data. When you edit a product description through WooCommerce or BEAR, the change is written to the standard WordPress post content field. But Elementor completely ignores that field on pages it controls and renders its own JSON data instead. So the two are disconnected.

There is a way to bridge this technically. The idea is to hook into the moment BEAR saves the product description and at that same moment find the matching text-editor widget inside _elementor_data, replace its content with the new value, and write the updated JSON back. Here is roughly how that would look in code:

add_action('updated_post_meta', function($meta_id, $post_id, $meta_key, $meta_value) { if ($meta_key !== '_elementor_data') return; // not the hook we want actually }, 10, 4);

// Better: hook into woocommerce product save or post save add_action('save_post_product', function($post_id) { $elementor_data = get_post_meta($post_id, '_elementor_data', true); if (empty($elementor_data)) return;

$new_description = get_post_field('post_content', $post_id);
if (empty($new_description)) return;

$widgets = json_decode($elementor_data, true);
if (!is_array($widgets)) return;

// Recursively find text-editor widgets and update the first one
array_walk_recursive($widgets, function(&$value, $key) use ($new_description, &$updated) {
    // This does not work directly, recursive replacement needs a proper walker
});

// Correct approach: write a recursive walker
function update_elementor_text_editor(&$elements, $new_text, &$done) {
    foreach ($elements as &$element) {
        if ($done) break;
        if (isset($element['widgetType']) && $element['widgetType'] === 'text-editor') {
            $element['settings']['editor'] = $new_text;
            $done = true;
            break;
        }
        if (!empty($element['elements'])) {
            update_elementor_text_editor($element['elements'], $new_text, $done);
        }
    }
}

$done = false;
update_elementor_text_editor($widgets, $new_description, $done);

if ($done) {
    update_post_meta($post_id, '_elementor_data', wp_slash(json_encode($widgets)));
    // Also clear Elementor's CSS cache for this post
    delete_post_meta($post_id, '_elementor_css');
}

});

The main problem with this approach is that your pages have multiple text-editor (as on the screen link above) widgets and there is no reliable way to know which one is the product description and which one is the meeting point info, the address block, or any other text. The code above just updates the first text-editor it finds, which may be wrong for some products.

To make it reliable you would need to manually mark the correct widget in each product page inside Elementor by adding a custom CSS class like bear-description-target to that specific widget. Then the code searches for that class as a marker instead of blindly taking the first text-editor.

This is a custom implementation and not something we can add to BEAR as a general feature since every Elementor site has a different page structure. However if you want to go this route you can implement it in your functions.php or a small custom plugin.

The simpler solution which takes about five minutes is to open your Elementor template, delete the static text-editor widget that contains the description, and replace it with the WooCommerce Product Content dynamic widget. After that BEAR and WooCommerce will control the description and Elementor will just display whatever is in the product field. No custom code needed.

thanks so much for the help and code.

i understand the problem but only putting WooCommerce Product Content widget in Elementor Product site destroys ALL original data on top as well, so i have to build it from the scratch right?

and i think it also didnt work. i tried in bear afterwards and it didnt change the content. the problem is i want all the data (pics/ description additional selection (plugin) and stuff so it looks like here:

https://paragliding-academy.com/produkt/gleitschirm-a-schein-theorie-t13-17-09-2026-18-09-2026/

is it possible to build it like that? is it possible you do it and charge me for the work?

by the way i made a snippet appearing in fuctions.php with your code but changes didnt appear


add_action('updated_post_meta', function($meta_id, $post_id, $meta_key, $meta_value) { if ($meta_key !== '_elementor_data') return; // not the hook we want actually }, 10, 4);

// Better: hook into woocommerce product save or post save add_action('save_post_product', function($post_id) { $elementor_data = get_post_meta($post_id, '_elementor_data', true); if (empty($elementor_data)) return;

$new_description = get_post_field('post_content', $post_id);
if (empty($new_description)) return;

$widgets = json_decode($elementor_data, true);
if (!is_array($widgets)) return;

// Recursively find text-editor widgets and update the first one
array_walk_recursive($widgets, function(&$value, $key) use ($new_description, &$updated) {
// This does not work directly, recursive replacement needs a proper walker
});

// Correct approach: write a recursive walker
function update_elementor_text_editor(&$elements, $new_text, &$done) {
foreach ($elements as &$element) {
if ($done) break;
if (isset($element['widgetType']) && $element['widgetType'] === 'text-editor') {
$element['settings']['editor'] = $new_text;
$done = true;
break;
}
if (!empty($element['elements'])) {
update_elementor_text_editor($element['elements'], $new_text, $done);
}
}
}

$done = false;
update_elementor_text_editor($widgets, $new_description, $done);

if ($done) {
update_post_meta($post_id, '_elementor_data', wp_slash(json_encode($widgets)));
// Also clear Elementor's CSS cache for this post
delete_post_meta($post_id, '_elementor_css');
}
});

the code didnt work because it caused a error:


Fehler-Details
==============
Ein Fehler vom Typ E_ERROR wurde in der Zeile 1 der Datei /www/htdocs/w0099592/web/wp-content/plugins/code-snippets/php/snippet-ops.php(663) : eval()'d code verursacht. Fehlermeldung: Uncaught ArgumentCountError: Too few arguments to function {closure}(), 1 passed in /www/htdocs/w0099592/web/wp-includes/class-wp-hook.php on line 343 and exactly 4 expected in /www/htdocs/w0099592/web/wp-content/plugins/code-snippets/php/snippet-ops.php(663) : eval()'d code:1
Stack trace:
#0 /www/htdocs/w0099592/web/wp-includes/class-wp-hook.php(343): {closure}('3464910')
#1 /www/htdocs/w0099592/web/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters(NULL, Array)
#2 /www/htdocs/w0099592/web/wp-includes/plugin.php(522): WP_Hook->do_action(Array)
#3 /www/htdocs/w0099592/web/wp-includes/meta.php(353): do_action('updated_post_me...', '3464910', 116973, '_edit_lock', '1778927265:345')
#4 /www/htdocs/w0099592/web/wp-includes/post.php(2746): update_metadata('post', 116973, '_edit_lock', '1778927265:345', '')
#5 /www/htdocs/w0099592/web/wp-admin/includes/post.php(1780): update_post_meta(116973, '_edit_lock', '1778927265:345')
#6 /www/htdocs/w0099592/web/wp-content/plugins/elementor/core/editor/editor.php(282): wp_set_post_lock(Object(WP_Post))
#7 /www/htdocs/w0099592/web/wp-content/plugins/elementor/includes/heartbeat.php(40): Elementor\Core\Editor\Editor->lock_post('116973')
#8 /www/htdocs/w0099592/web/wp-includes/class-wp-hook.php(343): Elementor\Heartbeat->heartbeat_received(Array, Array)
#9 /www/htdocs/w0099592/web/wp-includes/plugin.php(205): WP_Hook->apply_filters(Array, Array)
#10 /www/htdocs/w0099592/web/wp-admin/includes/ajax-actions.php(3506): apply_filters('heartbeat_recei...', Array, Array, 'front')
#11 /www/htdocs/w0099592/web/wp-includes/class-wp-hook.php(341): wp_ajax_heartbeat('')
#12 /www/htdocs/w0099592/web/wp-includes/class-wp-hook.php(365): WP_Hook->apply_filters('', Array)
#13 /www/htdocs/w0099592/web/wp-includes/plugin.php(522): WP_Hook->do_action(Array)
#14 /www/htdocs/w0099592/web/wp-admin/admin-ajax.php(192): do_action('wp_ajax_heartbe...')
#15 {main}
  thrown

Hello Chris

The error was caused by leftover placeholder code in the snippet that should have been removed. There was also a second bug that would cause a fatal error when bulk-editing multiple products at once.

Please replace the entire snippet with the corrected version below:

add_action('save_post_product', function($post_id) {
    if (defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE) return;
    if (wp_is_post_revision($post_id)) return;

    $elementor_data = get_post_meta($post_id, '_elementor_data', true);
    if (empty($elementor_data)) return;

    $new_description = get_post_field('post_content', $post_id);
    if (empty($new_description)) return;

    $widgets = json_decode($elementor_data, true);
    if (!is_array($widgets)) return;

    $walker = null;
    $walker = function(&$elements, $new_text, &$done) use (&$walker) {
        foreach ($elements as &$element) {
            if ($done) break;
            if (isset($element['widgetType']) AND $element['widgetType'] === 'text-editor') {
                $element['settings']['editor'] = $new_text;
                $done = true;
                break;
            }
            if (!empty($element['elements'])) {
                $walker($element['elements'], $new_text, $done);
            }
        }
    };

    $done = false;
    $walker($widgets, $new_description, $done);

    if ($done) {
        update_post_meta($post_id, '_elementor_data', wp_slash(json_encode($widgets)));
        delete_post_meta($post_id, '_elementor_css');
    }
});

Try saving one product through BEAR and check the front end. If it still does not work, please create a staging clone of your site using the Duplicator plugin and share the admin login for the clone in the private data area of this ticket.

it works now but it destroys the whole elementor style: https://photos.app.goo.gl/C7W162Hz9M37K4NYA

Hello Chris

When BEAR saves the product, it writes the description into the standard WordPress post_content field. The text there does not carry the custom HTML structure, inline styles, classes or formatting that your original Elementor text-editor widget had. The snippet then takes whatever is in post_content and copies it as-is into the first text-editor widget in the page. So the visible result is: text gets updated, but all the original markup inside that widget (headings, spacing, custom classes, the way the text was styled inside Elementor) is replaced by the simpler version that BEAR wrote. From the outside this looks like"Elementor style is destroyed", but technically only the content of one widget was overwritten with simpler HTML.

I want to be upfront about one thing: BEAR and Elementor Pro use two independent data models. BEAR writes to post_content, Elementor reads from _elementor_data. We are not providing official compatibility between them — what we have been doing in this ticket is trying to build a small custom bridge as a goodwill effort, because there is no standard way for these two plugins to talk to each other. That bridge has limitations, and what you observed is one of them.

The good news: there are two cleaner solutions that do not require this custom code at all.

Option A — Use Elementor Pro Dynamic Tags (recommended, no code)

This is the proper way and your Pro license already supports it.

Open one of your course product pages in Elementor. Find the text-editor widget that should hold the description. Click inside the editor field — there is a Dynamic Tags icon (looks like a small database/stack icon, top-right of the field). Click it and choose"Post Content" (or"Post Excerpt" depending on what BEAR is writing into for you). From that moment the widget no longer holds static text — it reads the value live from the standard post field. You can still style it via the widget styling options (typography, color, spacing, alignment) and those styles will stay intact. BEAR will update post_content and the front end will reflect the change immediately, with all your styling preserved.

This is the cleanest solution and it works natively with BEAR without any custom code.

Option B — Mark the target widget with a CSS class

If for some reason Dynamic Tags do not fit your case (for example you have several text-editor widgets per product and BEAR should update a specific one, not always the first), then use a marker class.

In Elementor, on the specific text-editor that should be updated by BEAR, open the Advanced tab and add the CSS class: bear-description.

Then replace the previous snippet with this corrected version, which only touches widgets that have that exact class and also fixes the JSON encoding for Unicode characters (important for German umlauts):

add_action('save_post_product', function ($post_id) {
	if (defined('DOING_AUTOSAVE') AND DOING_AUTOSAVE)
		return;
	if (wp_is_post_revision($post_id))
		return;

	$elementor_data = get_post_meta($post_id, '_elementor_data', true);
	if (empty($elementor_data))
		return;

	$new_description = get_post_field('post_content', $post_id);
	if (empty($new_description))
		return;

	$widgets = json_decode($elementor_data, true);
	if (!is_array($widgets))
		return;

	$walker = null;
	$walker = function (&$elements, $new_text, &$done) use (&$walker) {
		foreach ($elements as &$element) {
			if ($done)
				break;
			$css_classes = isset($element['settings']['_css_classes']) ? $element['settings']['_css_classes'] : '';
			if (isset($element['widgetType']) AND $element['widgetType'] === 'text-editor' AND strpos($css_classes, 'bear-description') !== false) {
				$element['settings']['editor'] = $new_text;
				$done = true;
				break;
			}
			if (!empty($element['elements'])) {
				$walker($element['elements'], $new_text, $done);
			}
		}
	};

	$done = false;
	$walker($widgets, $new_description, $done);

	if ($done) {
		$encoded = wp_json_encode($widgets, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
		update_post_meta($post_id, '_elementor_data', wp_slash($encoded));
		delete_post_meta($post_id, '_elementor_css');
	}
});

 

With this version, only the widget you explicitly marked with the class bear-description gets updated, and all other Elementor blocks on the page remain completely untouched.

My recommendation is Option A — it is what Elementor Pro is designed for and it removes the need for any custom code. Option B is the fallback if your page layout really needs to keep static styled text-editors.

Please try Option A on one course page first, save it, then test BEAR on that product and see whether the description updates correctly on the front end with all styling preserved.

thanks a lot for the help but it makes thinks zu complicated for me but i understood that there is no nice solution for me so far so i do all the changes manualy for the moment.

there is one funny thing i cant resolve and it would  be great if you can help me. i made a change with bear and as i sait it destroyed the layout during different databases.

i cant just delete the content and put the new one in now. all the time the old, wrong unformated content appeared. i duplicated the right product and also gave it a different name but i think bear is putting the"old, wrong" content in, as soon as i reload.

the product should look like this: https://paragliding-academy.com/produkt/gleitschirmreise-teneriffa2-15-11-2026-22-11-2026/

but it looks like this: https://paragliding-academy.com/produkt/teneriffa-gleitschirmreise1-08-11-2026-15-11-2026/

even as i said when i delete it and make a new one. really strange. can you login and check this issue?

 

thanks a lot,

chris

Hello Chris

Sure, let me take a look directly on your site. Since this is a live production site please make a clone first using the Duplicator plugin and share the WordPress admin and FTP credentials in the private data area of this ticket. Please make sure to use the private area only, as you have already posted login details publicly earlier in this thread.

If cloning feels like too much work, just make a full backup and share the live site credentials + ftp instead. I will then experiment on one specific product only and will not touch anything else.

https://share.pluginus.net/image/i20230222134241.png
https://share.pluginus.net/image/i20230222134615.png

ok thanks a lot i made a backup you can edit the product


Hello Chris

Thank you for the access, everything is working. I have passed this to the developer and will get back to you next week with results. I cannot guarantee a specific outcome at this stage but dedicated time will be allocated to look into this.

One important note: please change your WordPress password immediately. The credentials you shared were posted in the public part (on some messages above) of the ticket and are visible to anyone. I was able to log in, but I am not going to change the password myself since it is your site and doing so without your knowledge could cause confusion. Please update it now and once you have done that, share the new credentials in the private data section of the ticket. And going forward, please never post any logins or passwords in the public area — always use the private section of this ticket only.

 

thanks a lot for your help i am on my way to slovenia for the next 2 weeks and not in the office. you can change the password no worries. thanks for the great support, chris

Hello Chris

Ok, within some days this ticket will be reviwed and resolved, and by the way after fix will be resolved I can suggest you one thing for you site-shop, maybe you will be interesed in it, its related to this startup: https://botoscope.com/

Just looked the site and created test product: wp-admin/post.php?post=117159&action=elementor -> produkt/tester/

Here is the screen for description you need to apply, just place it as block in another blocks and use dynamic tags https://share.pluginus.net/image/i20260525143914.png - so now I going to BEAR and can manage desription as you want

Here is how to do it for each course page:

  1. Open the product page in Elementor editor.
  2. Click on the text block that holds the course description. The left panel will show"Edit Text Editor". (see the screen above)
  3. In the left panel, look at the top-right corner of the text field area. You will see a small icon that looks like a stack of circles. Click it — a dropdown will appear with dynamic tag options.
  4. Scroll down slightly in that dropdown until you see the"Post" section. Select"Product Content".
  5. The text field will now show a gray placeholder in the editor — this is normal. It means the widget is now reading content live from WooCommerce instead of storing it statically.
  6. Click Publish to save.

From this point on, whenever you edit the description through BEAR and save, the change will appear on the front end immediately. All other blocks on the page — images, schedule, buttons, layout — remain exactly as they are and you can continue building and styling them in Elementor as usual.

The same approach applies to the Short Description field — the one that appears next to the product image. Follow the exact same steps, but in step 4 choose"Product Short Description" instead of"Product Content".

thanks a lot for your help i check that after slovenia but can you please repair the single product teneriffa1 so it looks like teneriffa2 again, thanks

12