Как применить фильтр контента на постоянной основе?
У меня есть следующий временный фильтр для исправления ошибки содержимого. В наших сообщениях есть данные с 4-значными почтовыми кодами, потому что начальный ноль был вырезан при создании исходного файла. (Например, почтовый индекс Массачусетса - 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');
Как я могу применить этот фильтр ко всему контенту сразу и повторно сохранить записи, чтобы я мог полностью удалить фильтр регулярных выражений?
2 answers
//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. Просто убедитесь, что перед этим правильно создайте резервную копию базы данных и, если возможно, протестируйте ее при отдельной установке.