wp-cli - super admin tips and tricks
TRANSCRIPT
WP-CLI –Super Admin LevelTips and TricksJONATHAN PERLMAN
@JPURPLEMAN
WWW.JPURPLEMAN.CA/WCOTTAWA2016
Jonathan Perlman14 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
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
WP-CLI RequirementsUNIX-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
hello-world.sh#!/bin/bash
echo 'Hello World!'
bash hello-world.sh
chmod +x hello-world.sh
./hello-world.sh
6/18/2016 WORDCAMP OTTAWA 2016
variables.sh#!/bin/bash
error
X=hello world
X = "hello world"
OK
X="hello world"
#output
echo $X
6/18/2016 WORDCAMP OTTAWA 2016
conditionals.sh#!/bin/bash
city=$1
if [ "$city" == "Ottawa" ]
then
echo "What a great city"
else
echo "Hello, you're in WordCamp $city!"
fi
6/18/2016 WORDCAMP OTTAWA 2016
loops-and-arrays.sh#!/bin/bash
servers=( 'web1.example.com' 'web2.example.com' )
for server in "${servers[@]}"; do
echo $server
done
6/18/2016 WORDCAMP OTTAWA 2016
.bashrc & scriptsYou 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
Script – wp-cli-install.sh#!/bin/bash
servers=( 'web1.example.com' 'web2.example.com‘ )
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
for server in "${servers[@]}"; do
echo $server
scp ./wp-cli.phar user@$server:
ssh user@$server "chmod +x wp-cli.phar"
ssh user@$server "sudo mv wp-cli.phar /usr/local/bin/wp"
ssh user@$server "/usr/local/bin/wp --info"
done
rm ./wp-cli.phar
6/18/2016 WORDCAMP OTTAWA 2016
.bashrc - Get WordPress Saltsalias wordpress-salt='wget
https://api.wordpress.org/secret-key/1.1/salt/ -qO-'
Normally one line, not multiple…
6/18/2016 WORDCAMP OTTAWA 2016
.bashrc - Update WordPressalias wordpress-update-all='wp core update &&
wp core update-db --network &&
wp plugin update --all &&
wp theme update --all '
Normally one line, not multiple…
6/18/2016 WORDCAMP OTTAWA 2016
.bashrc – Delete Sample Pagealias wordpress-delete-sample-page=‘wp post delete $(
wp post list
--post_type=page
--posts_per_page=1
--post_status=publish
--pagename="sample-page"
--field=ID
--format=ids
)’
6/18/2016 WORDCAMP OTTAWA 2016
.bashrc - Remove Default Widgetsalias wordpress-remove-default-widgets='
wp widget delete search-2 &&
wp widget delete recent-posts-2 &&
wp widget delete recent-comments-2 &&
wp widget delete archives-2 &&
wp widget delete categories-2 &&
wp widget delete meta-2'
Normally one line, not multiple…
6/18/2016 WORDCAMP OTTAWA 2016
Script - see-option-on-all-sites.sh#!/bin/bash
for url in $( wp site list --field=url --url=http://site.com | sort –u )
do
echo $url
wp option get blogname
done
6/18/2016 WORDCAMP OTTAWA 2016
see-all-sites-with-gravity-forms.sh#!/bin/bash
for blog_id in $(wp site list --field=blog_id --url=http://site.com | sort -u )
do
echo $blog_id
wp db query "select count(id) from wp_${blog_id}_rg_form"
done
6/18/2016 WORDCAMP OTTAWA 2016
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
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
Resulting git log – 14 commits123438b 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
.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
.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
Script – wp-install.shIf 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
Resourceshttps://www.maketecheasier.com/write-linux-shell-scripts/
https://www.ltconsulting.co.uk/automated-wordpress-installation-with-bash-wp-cli/
https://deliciousbrains.com/automating-local-wordpress-site-setup-scripts/
https://www.smashingmagazine.com/2015/09/wordpress-management-with-wp-cli/
6/18/2016 WORDCAMP OTTAWA 2016
Thank you! Questions?JONATHAN PERLMAN
@JPURPLEMAN
WWW.JPURPLEMAN.CA/WCOTTAWA2016