facebook twitter flickr rss

Changing Your WordPress Theme Using XML-RPC, Part II - January 27th, 2013

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.



No Comments

No comments yet.


RSS feed for comments on this post.
TrackBack URI


Leave a comment



Posted in Thoughts | No Comments »