WP-CLI
WP-CLI is the command-line interface for WordPress. It is a PHP package that you have to install on your web server.
Once installed, you can use the wp
command in the terminal to update plugins, configure multisite installations and much more, without using a web browser.
FacetWP WP-CLI support
FacetWP includes built-in support for using WP-CLI to do a full or partial re-index, or to purge FacetWP’s index table. See the available commands below.
You can use WP-CLI to manually trigger re-indexing, or you can use a WP-CLI command in a cron job to re-index at pre-defined intervals.
Re-indexing with WP-CLI is the recommended approach for indexing high-content sites, or sites with large amounts of content imported regularly. In these cases the automatic indexing process can become problematic. Using WP-CLI will give you full control over when the indexing process runs exactly, and at which frequency. In this approach, FacetWP’s automatic indexing can be turned off with the facetwp_indexer_is_enabled hook.
How to trigger indexing with WP-CLI
Once WP-CLI is installed, follow these steps to trigger a full re-index:
Log in with SSH
Open a new terminal window on your computer and SSH into your server with your user account.
You can also log in as root user, but then WP-ClI will display a security warning when you enter a command. If you logged in as root, you can switch to your user account with:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
su yourusername
First make sure WP-CLI is installed correctly, in which case the following command will output information about the installation, like the version and directory it is installed in:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp --info
Navigate to the WordPress directory
To see in which directory you are in your user account, you can use the ls
command, which will display a listing of all files and directories at the current level.
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
ls
To be able to use the indexing commands, you need to navigate to the directory your WordPress installation is in (the directory that contains wp-config.php).
The directory structure can vary per server, but often you need to descend only one directory to the public_html
directory:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
cd public_html
If this is not the case on your server, use the cd
(“change directory”) command to go into the correct directory:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
cd path/to/your/wp/folder
You can use the ls
command again to check if you are in the proper directory. If not, you can always go back up one level with:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
cd ..
Use the facetwp index command
When you have landed in the right directory, you can use any of the below indexing commands.
To trigger a full re-index, enter the wp facetwp index
command:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index
If all is well, after a few seconds the re-indexing process will start. While the process is running, your terminal will display a live progress bar that looks like this:
yourusername$ wp facetwp index Indexing: 47 % [==========> ] 0:14 / 0:30
Depending on the number of posts, products, product variations, terms, and facets, the indexing process can take anywhere from a few seconds or minutes to several hours. Once the indexing is completed, a success message will be displayed below the progress bar:
yourusername$ wp facetwp index Indexing: 100% [=====================================] 0:30 / 0:30 Success: Indexing complete.
If you need to kill the indexing process, you can use ^C
(CTRL-C).
You can also do a partial re-index by specifying post IDs, post types or facets. Or you can purge the index database table:
WP-CLI indexing commands
FacetWP provides 2 CLI commands. One for indexing:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index [--ids=<ids>] [--facets=<facets>]
and the other for purging the index database table:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp purge [--ids=<ids>] [--facets=<facets>]
Parameters you can use for both commands:
- ids (optional) — a comma-separated list of post IDs
- facets (optional) — a comma-separated list of facet names
Command examples
wp facetwp index
Re-index the entire site:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index
Re-index a single post:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index --ids=42
Re-index a multiple posts:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index --ids=42,43,44
Re-index one or more facets, in this example the facets named “make” and “model”:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index --facets=make,model
Re-index all posts in a post type, in this example a post type named “cars”:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp index --ids=$(wp post list --post_type=cars --format=ids | tr " " ",")
Re-index all sub-sites in a WP multi-site install:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp site list --field=url | xargs -n1 -I % wp --url=% facetwp index
wp facetwp purge
Purge the index table:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp purge
Purge values for a facet named “year”:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp facetwp purge --facets=year
WP-CLI indexing with a cron job
The above indexing commands can also be run with a cron job on your server.
This approach gives you control over when the indexing process runs exactly, and at which frequency. You could for example schedule it to run in the middle of the night every other day.
There are a few ways you can set up a cron job for a WP-CLI indexing command:
Set an indexing cron job in your hosting panel
If you have access to a hosting panel, like cPanel or DirectAdmin, you can easily set up a cron job in its interface.
The following cron command will change the directory to the site’s main folder, and start a full re-index:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
cd /path/to/your/wp/folder/; wp facetwp index
If you set this command to run at 02:00 AM every day, the cron job would look like this in cPanel:
Note: you can add >/dev/null 2>&1
after a command in a cron job to disable email notifications:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
cd /path/to/your/wp/folder/; wp facetwp index >/dev/null 2>&1
Using a bash script
Another approach is to use a bash script. First, make a new shell script file called index.sh
in the same directory as your WordPress install, and set its contents to:
#!/bin/bash cd /path/to/your/wp/folder wp facetwp index
You can then use the following cron command to execute the lines in the bash script:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
sh /path/to/your/wp/folder/index.sh
Set an indexing cron job in terminal
If you don’t have access to a hosting panel to set cron jobs, or if you prefer using the terminal, you can set cron jobs with the crontab -e
command.
Using the example bash script above, set to run at 02:00 AM every day, the cron job to add would look like this:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
0 2 * * * sh /path/to/your/wp/folder/index.sh
The Crontab Generator can help with getting the syntax of the timing right.
Use WP-CLI on a WP multi-site install
Using WP-CLI on a WP multi-site install is a bit more complicated, and there is little documentation available online.
The following command is the multi-site equivalent of the “wp facetwp index” command. It will index all sub-sites within a multi-site install:
How to run server commands?
Commands need to be entered in a command line interface, like Terminal. To run server commands, you first need to log in to the server with SSH. WP-CLI commands can only be run when you are in the website's WordPress directory. More info about using WP-CLI
wp site list --field=url | xargs -n1 -I % wp --url=% facetwp index
This command was derived from the examples on this page. And here is another good article about using WP-CLI commands on multi-site installations.