WP-CLI – The Command Line Tool For WordPress
WordPress is one of the most used
CMS and blogging platform on the web and also it’s probably the most criticized one in the
PHP community as well, because the way it works but not sure about that so pardon me if I’m wrong. Anyways, so whatever it’s but it has dominated the web for a long period of time and like this one, no other
application (or whatever you call it) could made so far. It’s still very active and serving pretty well. Although it was built as blogging platform but by the time and effort of the developer community it become one of the major
CMS and it’s been used for not not only as a blogging tool or
CMS but also it’s been used to build complex e-commerce sites and other complex web applications. One of the biggest advantages is that, it’s plug-n-play, I mean, for every single need there is a plugin available and even non-programmers (advanced uses) can easily install it and can run the system for their online shipping sites with a very less effort because plenty of themes and plugins are just only one click a way. If you know how to search and where to search for a theme or plugin then you can start an online shopping site without writing any code.
But, time has been changed and our expectations are being higher. Now, it’s time for modern programming techniques and tools like
codeception and so many cool things that become one of the part of our daily development process and we can’t think anything without
OOP. In this case,
WordPress doesn’t meet the needs. Well, probably it does but we just think it like this, such as it’s all about messy templating with a mash up of
PHP code, which sounds a boring task but probably there are better ways to use
WordPress using modern programming tools and techniques. Well, actually we can write clean code with
WordPress using modern testing tools like
behat and dependency manager like
composer and we may integrate templating engines like
blade as well to write clean code for building a
There is already a plugin (could be more) called timber which helps to build a template using twig templating engine which cleans-up your theme code so your
PHP file can focus on supplying the data and logic, while your
twig file can focus completely on the presentation. You may read more about timber.
Also there is a nice framework (I was not aware of this before) called Themosis which uses
MVC pattern and expressive syntax like famous framework
Laravel and also uses the
blade templating engine of
Laravel. It has a very elegant routing system and it uses
composer to build a modern WordPress stack by default. So check it if didn’t yet. probably there are other beautiful stuffs out there but anyways. These are extra dependencies for
WordPress but even without using these tools we are able to write clean
OOP code in
WordPress to build plugins and themes.
Anyways, one of the most amazing things that really a cool addition into the
WordPress is it’s
Command Line Tool which is not very new but not even very old and it’s WP-Cli.
WP-CLI is a set of command-line tools for managing WordPress installations. You can update plugins, set up multisite installs and much more, without using a web browser.
This tool is really one of the sexiest things in
WordPress and it’s very helpful for developers, it lets download and install
command line and also we can use it to manage the site very easily and not only this but also we may generate code snippets to speed up our development process. It’s very easy to install, just visit the home page and read the instructions. Notice there are alternative install methods available and it can be done using composer as well. Okay, enough talk, now let see some examples, I’ve installed it using
composer by running following command from my terminal:
> composer create-project wp-cli/wp-cli --no-dev
It’s possible to install it globally, to do that, just create a
folder and use
cd folder to get into that folder then run the above command so it’ll be installed in that directory and make sure to add the executable path in your
path (for windows) or move it to the
bin directory for
OS. Once it’s installed then check if it works by running
wp from your command line. It’ll show some information including it’s current version number. Now lets download
WordPress from command line using
WP-Cli, run following commands step by step:
# Download WordPress in the current directory > wp core download
Then create a database (I’m using mysql from command prompt):
# Log into mysql (Make sure your mysql executable is accessible from your current folder) > mysql -u root -pyourpassword; # create a new database > create database wpcli_test; #Exit out from mysql > exit;
Then run the following command to provide log in credentials:
# Provide your login credentials > wp core config --dbname=wpcli_test --dbuser=root --dbpass=yourpassword
Then run the following command to start installation:
# Provide following options properly # url, title, admin_user, admin_password, admin_email > wp core install --url=http://localhost/your-project-directory --title=SiteTitle --admin_user=wplogin --admin_password=wppassword --email@example.com
If everything want right then
WordPress will be installed within a few seconds. That’s it, without using the mouse, just from command line the
WordPress has been installed very easily. Well, that’s not all but now we’ll see some more examples that we can run from command prompt using
WP-Cli but there are many commands and I won’t cover all so visit the WP-Cli website to check fill list of commands.
WP-CLIhas a series of global parameters which work with all commands. They can be specified either as flags for the
wpexecutable in the terminal, or defined in a
It’s possible to create a post from command line using following command:
# Create a Post > wp post create --post_type=post --post_title="A post" --post_status=publish
To create a post using content from a file, use
# Create a Post but use content from post-content.txt file in current directory > wp post create ./post-content.txt --post_category=1 --post_title="A Post from file"
To update a post use
# Update the Post whose id is 5; set post_status=publish > wp post update 5 --post_status=publish
Check wp post command for more
sub-commands such as
wp post list to view a list of your posts or
wp post delete for deleting a post and many more.
To generate some post samples for testing you may use
# Generate 5 Pages (in database) with specific date > wp post generate --count=5 --post_type=page --post_date=1999-01-04
To generate some post samples for testing but give input from remote server:
# Generate 10 Posts (in database) give post_content from web using curl > curl http://loripsum.net/api/5 | wp post generate --post_content --count=10
To generate some code snippet (scaffold) for a custom taxonomy use
# Auto generate a code snippet for custom taxonomy > wp scaffold taxonomy venue --post_types=event,presentation
This will dump the code to
std_out (console) and you need to copy and paste it in your script file but you may also generate the code and dump it into a file using following command:
# Auto generate a code snippet for custom taxonomy but save the code in a file, in twentytwelve theme folder > wp scaffold taxonomy venue --post_types=event,presentation --theme="twentytwelve"
Above command will generate the code snippet and then it’ll create a folder “texonomies” in tweentytwelve folder and then it’ll save the code in
venue.php file. The code will look something like this:
false, 'public' => true, 'show_in_nav_menus' => true, 'show_ui' => true, 'show_admin_column' => false, 'query_var' => true, 'rewrite' => true, 'capabilities' => array( 'manage_terms' => 'edit_posts', 'edit_terms' => 'edit_posts', 'delete_terms' => 'edit_posts', 'assign_terms' => 'edit_posts' ), 'labels' => array( 'name' => __( 'Venues', 'twentytwelve' ), 'singular_name' => _x( 'Venue', 'taxonomy general name', 'twentytwelve' ), 'search_items' => __( 'Search venues', 'twentytwelve' ), 'popular_items' => __( 'Popular venues', 'twentytwelve' ), 'all_items' => __( 'All venues', 'twentytwelve' ), 'parent_item' => __( 'Parent venue', 'twentytwelve' ), 'parent_item_colon' => __( 'Parent venue:', 'twentytwelve' ), 'edit_item' => __( 'Edit venue', 'twentytwelve' ), 'update_item' => __( 'Update venue', 'twentytwelve' ), 'add_new_item' => __( 'New venue', 'twentytwelve' ), 'new_item_name' => __( 'New venue', 'twentytwelve' ), 'separate_items_with_commas' => __( 'Venues separated by comma', 'twentytwelve' ), 'add_or_remove_items' => __( 'Add or remove venues', 'twentytwelve' ), 'choose_from_most_used' => __( 'Choose from the most used venues', 'twentytwelve' ), 'menu_name' => __( 'Venues', 'twentytwelve' ), ), ) ); } add_action( 'init', 'venue_init' );
All you need to do is that, just include the file in your
functions.php file and the code will run and a custom taxonomy will be created (edit the code if needed then save). Check the wp scaffold command for more
sub-commands, you may generate code snippet for
Post Types and many others. There are some other commands are available as well and those are also very useful, so check the website for full list of commands. Also, there are a bunch of community commands are available as external commands, which means anyone can create custom commands and for to learn more about creating a custom command check Commands Cookbook and also check this Contributor guide if you want to contribute.
So far, it’s good enough and currently another version is under development and in that version the Boris will be added for interactive
PHP console as
wp shell command.
Well, it’s all for this article. To be honest, this is really a great addition to
WordPress and hope the
WordPress community will keep it (WordPress) alive and take it to the next level which will bring back the joy of coding.