Browse Source

First commit

master
Adrian Short 9 years ago
commit
873c4fd166
1 changed files with 114 additions and 0 deletions
  1. +114
    -0
      metaupdater.php

+ 114
- 0
metaupdater.php View File

@@ -0,0 +1,114 @@
<?php
/*
Plugin Name: Meta Updater
Plugin URI:
Description: Bulk insert and update custom fields
Version: 0.1
Author: Adrian Short
Author URI: https://adrianshort.org/
License: CC0/public domain
*/

add_action( 'admin_menu', 'as_metaupdater_menu' );

// Add submenu to Tools menu
function as_metaupdater_menu() {
add_submenu_page(
'tools.php', // top-level handle
'Meta Updater', // page title
'Meta Updater', // submenu title
'manage_options', // capabilities
'as_metaupdater', // submenu handle
'as_metaupdater_page' //function
);
}

function as_metaupdater_page() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_die("You do not have sufficient permissions to access this page.");
}
?>
<div class="wrap">
<h2>Meta Updater</h2>

<?php
if ( 'POST' == $_SERVER['REQUEST_METHOD'] ) {
foreach( explode( PHP_EOL, $_POST['data'] ) as $row ) {
$data[] = str_getcsv( $row );
}
echo "<pre>";
print_r( $data );
echo "</pre>";

$header_row = array_shift( $data );
$search_field = $header_row[0];
$replace_field = $header_row[1];

print_r( $header_row );
print_r( $data );

echo "Search: $search_field, replace: $replace_field";

echo "<h3>Results</h3>";

$success = 0;

foreach( $data as $row ) {

$args = array(
'meta_key' => $search_field,
'post_type' => 'site'
);

if ( is_string( $row[0] ) ) {
$args['meta_value'] = $row[0];
} elseif ( is_numeric( $row[0] ) ) {
$args['meta_value_num'] = $row[0];
}

echo "<p>";
print_r( $args );

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
echo get_the_title();

if ( $_POST['dry_run'] != '1' ) {
echo "Updating meta for real";
if ( update_post_meta( get_the_ID(), $replace_field, $row[1] ) ) {
$success++;
}
}

}
} else {
echo "No results<br>";
}

}

echo "<h3>Saved $success terms.</h3>";
}
?>
</div>

<form method="POST" action="">
<p>
Paste in CSV data: column 1 holds the key field and column 2 holds the value. The first row must be a header row. Every post with the field set to the value in column 1 will have a field added or updated with the value in column 2.
</p>

<textarea name="data" rows="15" cols="60">
openlylocal_id,area_covered
2192,"All of London"
2191,"Greater Manchester"
</textarea>
<p><input type="checkbox" name="dry_run" value="1" checked="checked" /> <label for="dry_run">Dry run - leave the database unchanged</label></p>
<p><input class="button-primary" type="submit" value="Update Custom Fields" /></p>
</form>

<?php
}

Loading…
Cancel
Save