когда я использую этот код с json_decode/json_encode, посты обновляются путем удаления нужного элемента, но потом кажется, что страницы имеют ошибки и отображаются некорректно (графика), я думаю это из-за того, что Elementor использует определенные функции.
Код: Выделить всё
function bulk_remove_elementor_widget_with_log() {
$log = '';
$posts = get_posts(array(
'post_type' => 'post',
'meta_key' => '_elementor_data',
'post_status' => 'publish',
'numberposts' => -1,
));
if (empty($posts)) {
return "Not found.";
}
foreach ($posts as $post) {
$log .= "Processing post ID: " . $post->ID . " - " . $post->post_title . "\n";
$result = remove_elementor_widget_by_id_with_log($post->ID);
if ($result) {
$log .= "Element post ID: " . $post->ID . "\n";
} else {
$log .= "Element post ID: " . $post->ID . "\n";
}
}
return $log;
}
if (!function_exists('search_and_remove_widget')) {
function search_and_remove_widget($elements, &$found) {
foreach ($elements as $key => &$element) {
if (isset($element['id']) && $element['id'] === '4132e9d6') {
unset($elements[$key]);
$found = true;
}
if (isset($element['elements'])) {
$element['elements'] = search_and_remove_widget($element['elements'], $found);
}
}
return $elements;
}
}
function remove_elementor_widget_by_id_with_log($post_id) {
$elementor_data = get_post_meta($post_id, '_elementor_data', true);
$elementor_data = json_decode($elementor_data, true);
$found = false;
$new_elementor_data = search_and_remove_widget($elementor_data, $found);
if ($found) {
$new_elementor_data = json_encode($new_elementor_data);
update_post_meta($post_id, '_elementor_data', $new_elementor_data);
}
return $found;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ner-widget