Skip to content

Instantly share code, notes, and snippets.

@tlovett1
Created September 15, 2020 20:19
Show Gist options
  • Save tlovett1/6dfc7c1b54d3c54e6ac79a1b94c9398d to your computer and use it in GitHub Desktop.
Save tlovett1/6dfc7c1b54d3c54e6ac79a1b94c9398d to your computer and use it in GitHub Desktop.
Simple puppeteer script to update all WP posts via a headless browser.
const puppeteer = require('puppeteer');
const util = require('util');
if ( ! process.env.WP_URL || ! process.env.WP_USER || ! process.env.WP_PASS || ! process.env.DB_HOST || ! process.env.DB_USER || ! process.env.DB_PASSWORD || ! process.env.DB_NAME ) {
console.error( 'Missing env variables.' );
process.exit();
}
const prefix = process.env.DB_PREFIX || 'wp_';
const mysql = require('mysql');
const connection = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME
});
connection.connect();
const screenshot = 'github.png';
(async () => {
const query = util.promisify(connection.query).bind(connection);
const postIds = [];
console.log('Querying posts');
const results = await query('SELECT ID FROM ' + prefix + 'posts WHERE post_status="publish"');
results.forEach(function(result) {
postIds.push(result.ID);
});
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto(process.env.WP_URL + '/wp-login.php');
await page.evaluate((user, pass) => {
document.getElementById('user_login').value = user;
document.getElementById('user_pass').value = pass;
}, process.env.WP_USER, process.env.WP_PASS);
await page.click('#wp-submit');
await page.waitForNavigation();
for (let i = 0; i < postIds.length; i++) {
console.log('Updating post ' + postIds[i]);
try {
await page.goto(process.env.WP_URL + '/wp-admin/post.php?post=' + postIds[i] + '&action=edit');
await page.waitForSelector('.editor-post-publish-button', {visible: true });
await page.evaluate(() => {
document.querySelector('.editor-post-publish-button').click();
});
await page.waitForSelector('.components-snackbar__content', {visible: true });
} catch (e) {
console.log('Could not update post.');
}
}
browser.close();
process.exit();
})()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment