SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
WP-CLI –
Super Admin Level
Tips and Tricks
JONATHAN PERLMAN
@JPURPLEMAN
WWW.JPURPLEMAN.CA/WCOTTAWA2016
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
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 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
The way to level up …
Learn bash!
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 & scripts
HTTPS://GITHUB.COM/JPURPLEMAN/WORDPRESS-STUFF
6/18/2016 WORDCAMP OTTAWA 2016
.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
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 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
.bashrc - Update WordPress
alias 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 Page
alias 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 Widgets
alias 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
Now to the real
timesavers!
6/18/2016 WORDCAMP OTTAWA 2016
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
.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.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
Resources
https://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

Weitere ähnliche Inhalte

Was ist angesagt?

Challenges Building The New Joomla! Demo & Free Hosting Platform
Challenges Building The New Joomla! Demo & Free Hosting PlatformChallenges Building The New Joomla! Demo & Free Hosting Platform
Challenges Building The New Joomla! Demo & Free Hosting Platform
Daniel Kanchev
 
Scalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & ApproachesScalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & Approaches
Cal Henderson
 
20130714 php matsuri - highly available php
20130714   php matsuri - highly available php20130714   php matsuri - highly available php
20130714 php matsuri - highly available php
Graham Weldon
 

Was ist angesagt? (19)

Robust WordPress Installation using L2MP Stack
Robust WordPress Installation using L2MP StackRobust WordPress Installation using L2MP Stack
Robust WordPress Installation using L2MP Stack
 
Tipping the scale - Eyal Eizenberg - Wix
Tipping the scale - Eyal Eizenberg - WixTipping the scale - Eyal Eizenberg - Wix
Tipping the scale - Eyal Eizenberg - Wix
 
Tipping the Scale - Eyal Eizenberg
Tipping the Scale - Eyal EizenbergTipping the Scale - Eyal Eizenberg
Tipping the Scale - Eyal Eizenberg
 
PHP, LAMP Stack & WordPress
PHP, LAMP Stack & WordPressPHP, LAMP Stack & WordPress
PHP, LAMP Stack & WordPress
 
Challenges Building The New Joomla! Demo & Free Hosting Platform
Challenges Building The New Joomla! Demo & Free Hosting PlatformChallenges Building The New Joomla! Demo & Free Hosting Platform
Challenges Building The New Joomla! Demo & Free Hosting Platform
 
Scalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & ApproachesScalable Web Architectures - Common Patterns & Approaches
Scalable Web Architectures - Common Patterns & Approaches
 
My Website is Old Enough to Vote - My Website Can Vote - Building Sites That ...
My Website is Old Enough to Vote - My Website Can Vote - Building Sites That ...My Website is Old Enough to Vote - My Website Can Vote - Building Sites That ...
My Website is Old Enough to Vote - My Website Can Vote - Building Sites That ...
 
PDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
PDF Generation in Rails with Prawn and Prawn-to: John McCaffreyPDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
PDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
 
Scaling High Traffic Web Applications
Scaling High Traffic Web ApplicationsScaling High Traffic Web Applications
Scaling High Traffic Web Applications
 
The Characteristics of a Successful SPA
The Characteristics of a Successful SPAThe Characteristics of a Successful SPA
The Characteristics of a Successful SPA
 
Web performance
Web performanceWeb performance
Web performance
 
Presentation1
Presentation1Presentation1
Presentation1
 
Modern web application devlopment workflow
Modern web application devlopment workflowModern web application devlopment workflow
Modern web application devlopment workflow
 
20130714 php matsuri - highly available php
20130714   php matsuri - highly available php20130714   php matsuri - highly available php
20130714 php matsuri - highly available php
 
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
Ruby on Rails Performance Tuning. Make it faster, make it better (WindyCityRa...
 
MEAN Stack
MEAN StackMEAN Stack
MEAN Stack
 
Javascript - Getting started | DevCom ISITCom
Javascript - Getting started | DevCom ISITComJavascript - Getting started | DevCom ISITCom
Javascript - Getting started | DevCom ISITCom
 
10 step guide to convert HTML to Wordpress
10 step guide to convert HTML to Wordpress10 step guide to convert HTML to Wordpress
10 step guide to convert HTML to Wordpress
 
Les Basiques - Web Développement HTML5, CSS3, JS et PHP
Les Basiques - Web  Développement HTML5, CSS3, JS et PHPLes Basiques - Web  Développement HTML5, CSS3, JS et PHP
Les Basiques - Web Développement HTML5, CSS3, JS et PHP
 

Ähnlich wie WP-CLI - Super Admin Tips and Tricks

Cms drupal installation & configuration anil mishra
Cms drupal installation & configuration   anil mishraCms drupal installation & configuration   anil mishra
Cms drupal installation & configuration anil mishra
Anil Mishra
 

Ähnlich wie WP-CLI - Super Admin Tips and Tricks (20)

Making the Most of Plug-ins - WordCamp Toronto 2008
Making the Most of Plug-ins - WordCamp Toronto 2008Making the Most of Plug-ins - WordCamp Toronto 2008
Making the Most of Plug-ins - WordCamp Toronto 2008
 
Take Command of WordPress With WP-CLI
Take Command of WordPress With WP-CLITake Command of WordPress With WP-CLI
Take Command of WordPress With WP-CLI
 
Old WP REST API, New Tricks
Old WP REST API, New TricksOld WP REST API, New Tricks
Old WP REST API, New Tricks
 
5 年後還是新手 - WordPress Plugin 開發大冒險 - GOTY
5 年後還是新手 - WordPress Plugin 開發大冒險 - GOTY5 年後還是新手 - WordPress Plugin 開發大冒險 - GOTY
5 年後還是新手 - WordPress Plugin 開發大冒險 - GOTY
 
Installing hadoop on ubuntu 16
Installing hadoop on ubuntu 16Installing hadoop on ubuntu 16
Installing hadoop on ubuntu 16
 
安装Apache Hadoop的轻松
安装Apache Hadoop的轻松安装Apache Hadoop的轻松
安装Apache Hadoop的轻松
 
簡単にApache Hadoopのインストール
 簡単にApache Hadoopのインストール 簡単にApache Hadoopのインストール
簡単にApache Hadoopのインストール
 
Installing hadoop on ubuntu 16
Installing hadoop on ubuntu 16Installing hadoop on ubuntu 16
Installing hadoop on ubuntu 16
 
WordPress Plugin Development- Rich Media Institute Workshop
WordPress Plugin Development- Rich Media Institute WorkshopWordPress Plugin Development- Rich Media Institute Workshop
WordPress Plugin Development- Rich Media Institute Workshop
 
Docker for Developers - PNWPHP 2016 Workshop
Docker for Developers - PNWPHP 2016 WorkshopDocker for Developers - PNWPHP 2016 Workshop
Docker for Developers - PNWPHP 2016 Workshop
 
Take Command of WordPress With WP-CLI
Take Command of WordPress With WP-CLITake Command of WordPress With WP-CLI
Take Command of WordPress With WP-CLI
 
The GiveCamp Guide to WordPress
The GiveCamp Guide to WordPressThe GiveCamp Guide to WordPress
The GiveCamp Guide to WordPress
 
Advanced WordPress Tooling: By InstaWP.com
Advanced WordPress Tooling: By InstaWP.comAdvanced WordPress Tooling: By InstaWP.com
Advanced WordPress Tooling: By InstaWP.com
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupal
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupal
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
 
Cms drupal installation & configuration anil mishra
Cms drupal installation & configuration   anil mishraCms drupal installation & configuration   anil mishra
Cms drupal installation & configuration anil mishra
 
Take Command of WordPress With WP-CLI at WordCamp Long Beach
Take Command of WordPress With WP-CLI at WordCamp Long BeachTake Command of WordPress With WP-CLI at WordCamp Long Beach
Take Command of WordPress With WP-CLI at WordCamp Long Beach
 
Hyper v replication on windows server 2016 step by step
Hyper v replication on windows server 2016 step by stepHyper v replication on windows server 2016 step by step
Hyper v replication on windows server 2016 step by step
 
Get Started With Drupal
Get Started With DrupalGet Started With Drupal
Get Started With Drupal
 

Mehr von Jonathan Perlman

Mehr von Jonathan Perlman (7)

Leveling Upon Building Forms.pdf
Leveling Upon Building Forms.pdfLeveling Upon Building Forms.pdf
Leveling Upon Building Forms.pdf
 
WooCommerce Fundamentals
WooCommerce FundamentalsWooCommerce Fundamentals
WooCommerce Fundamentals
 
Leveling up on Building Forms
Leveling up on Building FormsLeveling up on Building Forms
Leveling up on Building Forms
 
The Dawson Way of Doing Things: A Study of Our Path Using WordPress
The Dawson Way of Doing Things: A Study of Our Path Using WordPressThe Dawson Way of Doing Things: A Study of Our Path Using WordPress
The Dawson Way of Doing Things: A Study of Our Path Using WordPress
 
WooCommerce Fundamentals
WooCommerce FundamentalsWooCommerce Fundamentals
WooCommerce Fundamentals
 
On the Move, Migrations Made Simple
On the Move, Migrations Made SimpleOn the Move, Migrations Made Simple
On the Move, Migrations Made Simple
 
10 things you need to know about leaving shared hosting
10 things you need to know about leaving shared hosting10 things you need to know about leaving shared hosting
10 things you need to know about leaving shared hosting
 

Kürzlich hochgeladen

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Kürzlich hochgeladen (20)

[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
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
  • 6. 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
  • 7. variables.sh #!/bin/bash error X=hello world X = "hello world" OK X="hello world" #output echo $X 6/18/2016 WORDCAMP OTTAWA 2016
  • 8. 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
  • 9. 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
  • 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
  • 12. 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
  • 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
  • 14. .bashrc - Update WordPress alias 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
  • 15. .bashrc – Delete Sample Page alias 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
  • 16. .bashrc - Remove Default Widgets alias 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
  • 17. 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
  • 18. 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
  • 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
  • 27. Thank you! Questions? JONATHAN PERLMAN @JPURPLEMAN WWW.JPURPLEMAN.CA/WCOTTAWA2016