WP-CLI is a powerful tool for developers and system administrators alike. I use the tool on a weekly basis for managing users, settings and WordPress installs. In this lightening talk, I will explain how I use the tool to create sites in bulk for learning environments, install and deploy updates to WordPress and perform changes to multi-site environments in a higher education setting.
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
WP-CLI - Super Admin Tips and Tricks
1. WP-CLI –
Super Admin Level
Tips and Tricks
JONATHAN PERLMAN
@JPURPLEMAN
WWW.JPURPLEMAN.CA/WCOTTAWA2016
2. Jonathan Perlman
14 years using PHP & MySql as a web developer at Dawson College
9 years teaching the web and Microsoft Office for Dawson College
6 years using WordPress
2 WordCamp talks
I’m not a Linux unicorn
6/18/2016 WORDCAMP OTTAWA 2016
3. What you need to know…
This works on Linux computers / servers.
Might work on Mac. Not tested on Mac.
Won't work on Windows.
Shared and managed hosts don't allow you to install WP-CLI
We won't be talking about WP-CLI "Packages“
All WordPress code samples are located in the repo
https://github.com/jpurpleman/WordPress-Stuff
6/18/2016 WORDCAMP OTTAWA 2016
4. WP-CLI Requirements
UNIX-like environment (OS X, Linux, FreeBSD, Cygwin);
limited support in Windows environment
PHP 5.3.29 or later
WordPress 3.7 or later
WordPress 4.5 or later requires WP-CLI version 0.23.0
6/18/2016 WORDCAMP OTTAWA 2016
5. The way to level up …
Learn bash!
6/18/2016 WORDCAMP OTTAWA 2016
11. .bashrc & scripts
You can run the custom
command in any folder
Will work for only your user
account
Better if you have more than one
server
You have to copy it to work in a
specific directory
You can create reusable scripts
You can create scripts the run
scripts
6/18/2016 WORDCAMP OTTAWA 2016
13. .bashrc - Get WordPress Salts
alias wordpress-salt='wget
https://api.wordpress.org/secret-key/1.1/salt/ -qO-'
Normally one line, not multiple…
6/18/2016 WORDCAMP OTTAWA 2016
19. Script - create-pages-in-bluk.sh ( 1 )
userID=1
pages=( 'Home' 'About' 'Contact Us' )
for page in "${pages[@]}"; do
wp post create
--post_type=page
--post_title="$page"
--post_status=publish
--post_author=$userID
--porcelain
echo "wp post create $page"
done
6/18/2016 WORDCAMP OTTAWA 2016
20. Script - create-pages-in-bluk.sh ( 2 )
wp menu create "Menu" --quiet
export IFS=" "
for pageID in $( wp post list
--order="ASC"
--orderby="ID"
--post_type=page
--post_status=publish
--posts_per_page=-1
--field=ID
--format=ids ); do
wp menu item add-post menu $pageID --quiet
done
wp menu location assign menu primary
6/18/2016 WORDCAMP OTTAWA 2016
21. Now to the real
timesavers!
6/18/2016 WORDCAMP OTTAWA 2016
22. Resulting git log – 14 commits
123438b 2016-06-16 Jonathan Perlman Adding plugin: WordPress Importer at version 0.6.2
449e092 2016-06-16 Jonathan Perlman Updating plugin: Print Friendly and PDF to version 3.4.6
b1d983a 2016-06-16 Jonathan Perlman Updating plugin: WooThemes Helper to version 1.6.2
8d2d7e3 2016-06-16 Jonathan Perlman Updating plugin: WP Migrate DB Pro Media Files to version 1.4.4
ce0181e 2016-06-16 Jonathan Perlman Updating plugin: WP Migrate DB Pro to version 1.6
3a37bd6 2016-06-16 Jonathan Perlman Updating plugin: Gravity Forms + Custom Post Types to version 3.1.3
91e2560 2016-06-16 Jonathan Perlman Updating plugin: jQuery Responsive Select Menu to version 1.5.0
83af679 2016-06-16 Jonathan Perlman Updating plugin: Gravity Forms to version 1.9.19
bbaa123 2016-06-16 Jonathan Perlman Adding plugin: Gravity Forms Advanced File Uploader at version 1.4
41b2ae1 2016-06-16 Jonathan Perlman Updating plugin: Google Analytics by MonsterInsights to version 5.5
81eac9d 2016-06-16 Jonathan Perlman Updating plugin: Custom Post Type UI to version 1.3.5
fbcc677 2016-06-16 Jonathan Perlman Updating plugin: Basic Google Maps Placemarks to version 1.10.6
c5bdb6c 2016-06-16 Jonathan Perlman Updating plugin: Advanced Custom Fields to version 4.4.7
476c404 2016-06-16 Jonathan Perlman Updating plugin: Accordion Shortcodes to version 2.3.0
6/18/2016 WORDCAMP OTTAWA 2016
23. .bashrc – git-wp-commit-object ( 1 )
Go into a plugin or theme folder
Get the current directory name
Check to see if we're in a plugin or theme folder
Convert "plugins" to plugin or "themes" to theme
Get details about the WordPress object we want to commit
Get the title of the plugin or theme we're committing
Get the version of the plugin or theme we're committing
6/18/2016 WORDCAMP OTTAWA 2016
24. .bashrc – git-wp-commit-object ( 2 )
Check to see if it's in the repo already or not
Create parts of the commit message conditionally
Add all files to git that have been added or modified
Add all files to git that have been deleted or moved
Git commit! with appropriate message
Print that message
6/18/2016 WORDCAMP OTTAWA 2016
25. Script – wp-install.sh
If we're going to remove sites
Do mysql stuff to drop the db, revoke all and remove the user
Destroy the file system folder of the site
If we’re going to add sites
Loop proposed sites and make sure we don't overwrite any folder
Mysql stuff, drop db if exists, create database, grant privileges
Delete and Create the directory of the install path
Go into the install path
Download the WordPress core files
Create the wp-config file with our standard setup
Generate random 8 character password
Create database tables, and install WordPress
Dump out information to a text file for the teacher
Dump out information for the specific student
discourage search engines
delete sample page, and create homepage
set homepage as front page
set pretty urls
delete akismet and hello dolly
create a navigation bar
disable file edit in wordpress config
create .htaccess file
create the .htpasswd file
change ownership of the folder to apache
change file permissions
Calculate and send percent done to whiptail
Convert text file of info for teacher to pdf
Convert many student one page documents into one pdf
6/18/2016 WORDCAMP OTTAWA 2016