Вопрос

У меня есть следующий временный фильтр, чтобы исправить ошибку контента. У нас есть данные в наших сообщениях с 4 -значными почтовыми индексами, потому что ведущий ноль был вырезан при создании исходного файла. (Например, почтовый индекс Massachusetts - 0xxxx, но теперь в нашем контенте это XXXX)

function fix_zip_code($content){
    if (preg_match('/<span class="postal-code">(\d{4})<\/span>/i',$content, $match)){
        $content = str_replace($match[0],'0'.$match[0],$content);
    }
    return $content;
}
add_filter('the_content', 'fix_zip_code');

Как я могу применить этот фильтр ко всему контенту одновременно и повторно заново выдвинуть посты, чтобы я мог полностью удалить фильтр Regex?

Это было полезно?

Решение

//run once

$allposts = get_posts('post_status=publish&numberposts=-1');
foreach ($allposts as $thispost) {
     wp_update_post( array(
          'ID' => $thispost->ID,
          'post_content' => fix_zip_code($thispost->post_content)
          )
     );
}

Но, как упоминал Рарст, резервную копию базы данных, прежде чем что -то делать ...

Другие советы

Вы можете попытаться подойти к этому со стороны WP/PHP, но я думаю, что в этом случае было бы легче запустить замену в базе данных.

Например, есть несколько инструментов Поиск и заменить для баз данных WordPress. Анкет Просто убедитесь, что, если это возможно, правильно создать резервную копию базы данных и протестируйте в отдельной установке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top