Last week I talked about how to enable getting theme names within WordPress using XML-RPC. So now our imaginary mobile app can retrieve a list of theme names from WordPress, but we want to switch the theme once a name is selected. We’ll have to create another function and assign it to method to be called.
WordPress has another function called switch_theme, so this time around we will be making this available. Here is our plugin with the additional code:
<?php
/*
Plugin Name: XML-RPC Theme Changer
Plugin URI: https://github.com/dailyinvention/xml-rpc-theme-changer
Description: Allows the ability to get and switch themes using XML-RPC.
Author: Stefan Holodnick
Author URI: http://blog.dailyinvention.com
Version: 1.0
*/
function theme_get_themes($params) {
global $wp_xmlrpc_server;
$wp_xmlrpc_server->escape( $params );
$username = $params[0];
$password = $params[1];
if ( ! $user = $wp_xmlrpc_server->login( $username, $password ) ) {
return $wp_xmlrpc_server->error;
}
else {
return wp_get_themes(false, true);
}
}
function theme_switch_themes($params) {
global $wp_xmlrpc_server;
$wp_xmlrpc_server->escape( $params );
$username = $params[0];
$password = $params[1];
$theme = $params[2];
if ( ! $user = $wp_xmlrpc_server->login( $username, $password ) ) {
return $wp_xmlrpc_server->error;
}
else {
switch_theme( $theme );
}
}
function theme_methods($methods) {
$methods['themes.getThemes'] = 'theme_get_themes';
$methods['themes.switchThemes'] = 'theme_switch_themes';
return $methods;
}
add_filter('xmlrpc_methods', 'theme_methods');
?>
As you can see the theme_switch_themes function that I added is very similar to the theme_get_themes function. It grabs a username and password sent by a client, sanitizes those values, and verifies the user with WordPress. If the username and password do not match up, then it returns an error, otherwise it runs the switch_themes function. You may also see an extra parameter called theme. This is the theme name that a user will send to WordPress through their mobile app. The switch_theme function then switches the theme to the name provided.
You’ll notice that I then include my function within the list of methods, giving it the name “themes.switchThemes”. Again this is the method that your client application will call to trigger a theme switch.
Now we have a plugin that allows a remote application to get and switch themes within WordPress. I’ve included the complete plugin at my Github account, if you would like to try it out. Maybe you may have a different idea for using WordPress’s XML-RPC commands. You can take this example and are free to do what you want with it. Some of the authentication code I used was directly from WordPress’s XML-RPC documentation.
Also, a word on security. Having an SSL certificate for your WordPress installation is preferred when doing XML-RPC calls. Although it is about as risky as logging in to a non-SSL encrypted WordPress site, you are still subject to man-in-the-middle attacks.
The next part of this tutorial, I will be talking about creating a mobile app that interacts with WordPress and uses the methods we have created to make the magic happen.
Be First to Comment