it-swarm.com.de

Wie wende ich den Inhaltsfilter dauerhaft an?

Ich habe den folgenden temporären Filter, um einen Inhaltsfehler zu beheben. Wir haben Daten in unseren Posts, die 4-stellige Postleitzahlen haben, da die führende Null abgeschnitten wurde, als die Originaldatei erstellt wurde. (Eine Postleitzahl in Massachusetts ist beispielsweise 0XXXX, in unserem Inhalt jedoch 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');

Wie kann ich diesen Filter auf alle Inhalte gleichzeitig anwenden und die Posts erneut speichern, damit ich den Regex-Filter vollständig entfernen kann?

1
Dan Gayle
//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)
          )
     );
}

Sichern Sie jedoch, wie von Rarst erwähnt, Ihre Datenbank, bevor Sie etwas unternehmen ...

5
goldenapples

Sie können versuchen, dies von WP/PHP-Seite aus zu erreichen, aber ich denke, in diesem Fall wäre es einfacher, die Ersetzung für die Datenbank auszuführen.

Es gibt verschiedene Tools, zum Beispiel Suchen und Ersetzen für WordPress-Datenbanken . Stellen Sie einfach sicher, dass die Datenbank vor der Installation ordnungsgemäß gesichert und nach Möglichkeit bei einer separaten Installation getestet wird.

1
Rarst