Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@rvanweerd
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rvanweerd/c33ee7d9d58e5ceefae8 to your computer and use it in GitHub Desktop.
Save rvanweerd/c33ee7d9d58e5ceefae8 to your computer and use it in GitHub Desktop.
Strip tags, replace, and more in WordPress database
<?php
/*
* Plugin Name: rvw Strip Tags
* Version: 0.0.2
* Description: Strip html tags from the Content, leave links and images
* Plugin URI: http://weerdpress.com
* Author: Ronald van Weerd
* Author URI: http://weerdpress.com
* Changelog: see history.txt
*/
if (!class_exists('rvw_strip_tags')) {
class rvw_strip_tags {
// the array with the replacement string(s)
var $replacements = array(
'old string' => 'new string'
);
function rvw_strip_tags() {
if (is_admin()) {
$this->load_admin();
}
}
function load_admin() {
add_action('admin_menu', array($this, 'rvw_add_strip_tags_page') );
}
function rvw_add_strip_tags_page() {
if ( function_exists('add_management_page') ) {
add_management_page('RVW Strip Tags', 'RVW Strip Tags', 10, basename(__FILE__), array($this, 'rvw_strip_tags_page'));
}
}
function rvw_strip_tags_page() {
if (isset($_POST['start'])) { // final run
$applychanges = true;
$this->rvw_strip_tags_process($applychanges);
} else if (isset($_POST['test'])) { // test run
$applychanges = false;
$this->rvw_strip_tags_process($applychanges);
} ?>
<div class=wrap>
<form method="post">
<h2>Strip Tags</h2>
<p>This plugin will go through each post looking certain tags or content, and remove or replace them.<br />
The rules are <strong>customised for each particular site</strong>, so the plugin should not be distributed and used on other sites "as is", as results may be unpredictable.</p>
<p>You can change the code in the plugin, or you can <a href="mailto:ronald@vanweerd.com">contact me</a> to customise the remove/replacement rules for your specific site.</p>
<p>Note: This plugin <strong>will</strong> update your WordPress posts table. <strong>ALWAYS</strong> make a backup before using this plugin.</p>
<div class="submit">
<input type="submit" name="start" value="Final Run" />
<input type="submit" name="test" value="Test Run" />
</div>
</form>
</div>
<?php
}
function rvw_strip_tags_process($applychanges = true) {
global $wpdb;
$results = $wpdb->get_results("SELECT ID, post_content, post_title FROM {$wpdb->posts} where post_type = 'post'");
$total = count($results);
$changed = 0;
echo '<div class="updated"><p>';
foreach( $results as $entry ){
$new_title = str_replace(array_keys($this->replacements), $this->replacements, $entry->post_title);
if ( $entry->post_title !== $new_title ) {
if ( $applychanges ) {
$wpdb->query( $wpdb->prepare(
"UPDATE {$wpdb->posts} SET post_title = %s WHERE ID = %s", $new_title, $entry->ID) );
echo "Updated <em>" . $entry->post_title . "</em> to <em>" . $new_title . "</em><br />";
} else {
echo "Post: <em>" . $entry->post_title . "</em> will be updated to <em>" . $new_title . "</em><br />";
}
$changed++;
}
}
if ( $applychanges ) {
printf("FINAL: %d out of %d posts have been updated", $changed, $total);
} else {
printf("TEST RUN: %d out of %d posts will be updated", $changed, $total);
}
echo '</p></div>';
}
}
}
// Instantiate the class
if (class_exists('rvw_strip_tags')) {
$rvw_strip_tags = new rvw_strip_tags();
}
@rvanweerd
Copy link
Author

Usage:
Download and install and activate as a plugin.
Edit, add, remove entries from the replacements array (line 18).
In wp-dashboard > Tools, find the RVW Strip Tags menu.

Make a BACKUP of (at least!) your wp-posts table.

Run a "Test Run" and check the results, if ok, run "Final Run"

This version will search and update post title only.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment