Tools for Web Application Development in WordPress

I am currently building HealerPress, a website builder for healers (SaaS) build on WordPress MultiSite. Coming from Yii, developing in WordPress is a big shift. The structure and concepts are quite different, and the initial plunge into procedural code is a shock. But, after awhile you get used to thinking differently and can appreciate how the stability of the code has allowed for such a rich eco-system to grow. Plus, you are free to use OOP and even an MVC approach in your plugins.

I’ve been researching tools and frameworks for WordPress to assist in rapid application development. Unfortunately, there aren’t a lot that are designed to help you build from the ground up. For better or worse, the accessible power of WordPress means a lot of projects that seem to be (or start out being) for developers, are actually trying to “make development easier for non-developers”. Non-developers don’t want (or don’t know how) to write code, so these solutions are cluttered with UIs that let a non-coder approximate creating functionality that you would otherwise have to hand-code. The result is more bloat and less flexibility.

I am not interested in these solutions because I want to build custom functionality that is clean and streamlined. So, that excludes a lot of “frameworks” that are actually theme frameworks–they let you build themes rapidly, but not apps.

For example, I’ve abandoned using Genesis for this project, which I’ve used for years as a theme framework, because I kept removing functionality and eventually it seemed pointless to even build on it. It’s great for rapid blog development, where it’s just a matter of tweaking the surface layers and copy and pasting some filters and functions for some customization. But it has it’s own structure that conflicts with the options and functionality I want to give my customers, so there’s no point in using it to build this web app.

But there are some tools out there that help. Here’s what I have ended up with so far.

Starting theme: Roots

Roots is build on HTML5Boilerplate and Twitter’s Bootstrap, which were my basic criteria. I also considered Bones as it is also based on HTML5Boilerplate, but not on Bootstrap. I am in love with Bootstrap, so I went with Roots.

I removed some of the functionality, like the URL-rewriting, which I find not all that exciting and which has been known to break in MultiSite. I’m not a fan of activation-hooks in general, so I disabled all of them.

Cascading LESS

I added lessphp to my parent theme to interpret LESS files. LESS is a dream when composing CSS – OMG I love it. I will never go back.

Because LESS compiles CSS, you need to have all your CSS interpreted at once in order to take advantage of variables and mix-ins. That means that it would be pointless to have some LESS in my parent theme and some in my child theme, unless I could chain them all together. So that’s what I’m doing.

I have created an import trail which first imports Bootstrap, and then defines LESS at the parent-theme level and at the child-theme level, letting each level override the previous ones. It’s pretty spiffy and should let me minimize the number of files the child themes have to have. This is the import flow:

    1. Bootstrap variables
    2. Parent-theme variables
    3. Child-theme default variables
    4. Any variables set through the user’s admin options
    5. Bootstrap LESS
    6. Parent-theme LESS
    7. Child-theme LESS

By importing all the variables first, later files can override variables in earlier files, before any of those variables are used in expressions. It’s awesome.

Since everything is imported into the last LESS file in the child-theme directory, that’s the one you set the compiler to convert to CSS. Easy-peasy.

Admin User Options

While I prefer convention to configuration, I want to let people change the window dressing, like colors and fonts. Defining option pages from scratch is a bear, so I wanted to find some kind of helper to make it easier. I found the Upthemes Options Framework, which seems promising, although I haven’t dug into it yet.

Piklist also promises to do this, and I will compare them — Piklist is brand spanking new (still in Beta) so I’m not sure how well supported it is or even who is sponsoring it. Where’s your About page guys? (OK, after some more digging, I found it is build by SlipFire, which seems to basically be Steve Bruner, who is active in the WP community. He says “we” and that he is a “partner” but who the other person/people are is not mentioned and he seems to be the only one doing commits. Hmm.)

Misc Other Stuff I Found

The PODS framework is interesting (v2 is in alpha), and I might use it in building HealerTree. It seems to be going toward the “support non-coders” approach with more UIs, so I’m not sure how that will impact performance and functionality.

InfiniteWP is massively helpful in administering multiple independent blogs. I’m not using it for this project, but I use it to keep all my other blogs updated so I thought I’d mention it.

WP-MVC – I really wanted to use this, but it doesn’t seem well enough supported – just one developer, and when I wrote him he said he just got a job at a startup…so I didn’t want to base my app on it.

Widgetkit – I don’t think this will be useful for me, but it might be useful for someone.

Comments

  1. Erica says:

    I’m currently working on build my latest web app using WordPress and I’ve found some useful information here. Thanks! I

    was wondering if you’ve had a chance to work with Piklist a bit more and if so, what are your thoughts? I’m thinking of using it in this project, but I’m still on the fence as to whether it will work well with my setup or make things more complicated. Would love to hear your thoughts!

  2. cheekyboots says:

    Hi Erica,

    Glad I could be helpful!

    After researching all these and trying to use another one, Types and Views, I got frustrated with how much more complicated some of these tools make things sometimes. Especially when they add the UI part so non-coders can use it. Then you don’t really have the same clarity for where things are stored in the database, so it’s hard to make modifications or transport the data. For example, I really like to define custom post types in my code so I can check them into version control, rather than using a plugin that stores them in the database.

    So, I started trying to learn more how to do it without any tools, just using native WP functions. But Piklist does look different, like it’s more solidly aimed at developers. I just looked at their site again and they say they are going to be building some pre-packaged solutions, and one is a User Portal – which would be really, really awesome. I’ve tried so many different ways to do that short of hand coding it all and I haven’t found a good one yet.

    So no, I haven’t worked with it yet, but your reminder of it makes me want to check it out again! If you do decide to use it or even investigate it more, I would love to hear your experience with it.

  3. Emyr says:

    Thanks for sharing your list of WP dev tools, and especially for pointing out Piklist. I hadn’t heard of it before, but it looks really awesome. I’ve been using Toolkit by OnTheGoSystems. The major benefit of Toolkit for me is it’s tight integration with WPML for multilingual sites which I build a lot of. See http://wp-types.com/ for more info.

    I agree though that a lot of these frameworks and plugins that are geared towards non developers become bloated with “easy to use” UIs.

  4. cheekyboots says:

    @Emyr I tried out Toolset (formerly Types and Views) – see my comment above yours. That was the last straw for me as far as complicated UI. I was looking forward to the front-end editing, but it just was too complex. I really don’t like storing stuff in the database either, because then it’s not versioned.

  5. Emyr says:

    @cheekyboots Agreed, although Types & Views does let you export the post types, taxonomies and custom fields setting as an XML file that you can place in your plugin or theme, and therefore keep versioned, but like you say – just seems much more complicated than it needs to be. The one good point about it though is that you can include part of the Types and Views plugin in your own plugin, which effectively lets you use the post types, taxonomies and custom fields that it generates without presenting the UI to generate and modify them to the end user. I’m quite looking forward to giving Piklist a try soon.

  6. Emyr says:

    I too have been using Genesis, and still do for many projects. It’s one of my favourite parent theme frameworks, and I find it’s more developer friendly than most others. However, like you, sometimes it feels like your “fighting the framework”. If I’m working on something with a lot of major customization work these days, I tend to start off using underscores by the Automattic Theme Team. I need some of the handy things Genesis normally provides (things like breadcrumbs or pagination), I use the excellent Hybrid Core by Justin Tadlock. Hybrid Core is a true framework, not a parent theme, like most other so-called “frameworks”. The code is clean and professional – it’s a real time-saver. Why reinvent the wheel eh?

  7. Steve Bruner says:

    @cheekyboots– Sorry for the lack of an About page. Though I wish I can take full credit for a plugin as awesome as Piklist, unfortunately I cannot. Piklist is a collaboration between myself and Kevin Miller.

    I think you will be quite happy with the UI we are building into Piklist. Less bloat… more power…

    Steve

  8. @cheekyboots I have been developing a web app with WP for a couple of months and I have found the PikList plugin to be invaluable. I think they are working hard to complete the plugin and get it out of beta stage and they still have a ways to go.

    I have found the adminimize (http://wordpress.org/extend/plugins/adminimize/) plugin to be a huge help as well. It allows you to toggle dashboard functions so that different roles see different dashboard pieces. This really helps in keeping the UI free of clutter for users.

  9. cheekyboots says:

    @John I’m curious, in what was was PikList invaluable? What did you use it for?

  10. @cheekyboots We have used to PikList to create a custom customer dashboard. I like that PikList really just leverages the existing WP architecture and APIs. PikList just adds a layer of abstraction on top of WPs codebase as opposed to something like PODS which has its own API and creates a new table in the database.

    PikList is on its way to be a great application framework for WP which is cool because then its easy to leverage WPs already existing web application features (login, URL rewrite, etc.).

    I really wish there was a shopping cart that could run in the admin. That is one feature that WP needs in order to become a better web application framework.

  11. Dave N. says:

    I just ran across this post and found this a most interesting discussion. Since it has been a couple Months since last comment, I was wondering if anyone has anything new to add.

    I am just now getting ready to start a fairly large project and have decided that I would like to develop using WordPress as the main foundation for my web app. I am very intrigued by PikList and the possibilities of using.

    What I really would like to see is PikList stay oriented at Developers and not go astray towards complicated bloat with too much for non developers. Don’t get me wrong, I love a little RAD drag and drop since I also use “HTML5 Builder” – [Formaly RadPHP], but also need to have easy and understandable access to getting down and dirty with ease without complicated UI’s that get in the way. (Note: I don’t use HTML5 Builder integrated with wordpress because I have not found a way to use apps developed with HTML5 Builder with an easy slap in method into WordPress – Wish I could!)

    My main concern with PikList is that while it currently free, it stands to reason that at some point it will become a commercial app? And without knowing what the planned price will be it is a little concerning that getting deep into developing now with it could become a cost not planned for in the future. Perhaps I am just a little too paranoid? :)

    Anyways, has anyone found anything else for using WordPress as a web app development platform (In a RAD way)? Or has anyone else had recent experience using PikList and can chime in more about this subject?

  12. Steve Bruner says:

    Dave N.– I am one of the developers of Piklist, and we are committed to keeping this plugin free and open source. We may sell other, related plugins, but Piklist itself will be free.

    Steve

  13. Dave N. says:

    @ Steve – Great to know!

    Thanks for chiming in here!

    — Dave

  14. Jonathan Nash says:

    I’m starting to look at WordPress as a RAD environment. It’s just over a year into your work with HealerPress. Any updates on the original post (which was very informative) which you are willing to share?

  15. cheekyboots says:

    @Jonathan I gave up on my original plan to use MultiSite and create an SaaS. It just got too complex for me to manage without a full-time WordPress developer ninja. There are a lot of tools and add-ons for WordPress out there, but they each have their own assumptions and business logic, and to glue them all together into something cohesive was beyond me. I don’t have the funds to bankroll that much custom development–and if I did, I wouldn’t use WordPress, I’d use a real framework like Yii or Laravel.

    I also realized I didn’t want to build another business that was basically a fancy version of web hosting. I am still working on solving the original problem (how to get websites in the hands of healers, a non-technical audience with low budgets), but I’m going in a different direction with the solution.

Leave a Comment

*