Как применить фильтр контента на постоянной основе?


У меня есть следующий временный фильтр для исправления ошибки содержимого. В наших сообщениях есть данные с 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');

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

Author: Dan Gayle, 2010-11-03

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)
          )
     );
}

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

 5
Author: goldenapples, 2010-11-03 20:38:49

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

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

 1
Author: Rarst, 2010-11-03 20:27:44