WPJax September 2014


My notes from this month's "WordPress Sampler" meeting of WPJax at Modis. Folks in our group range from business owners and students to advanced developers. Here are some of their recommendations and insights, primarily from Elizabeth, Clint, and Jonathan.

Themes and Development

Stock Photos and Shopping


Jonathan also shared his experience finding, tracking, and repairing a bug in the WordPress Core that has existed for years.

I encourage you to contact Clint, Jonathan, or Elizabeth for your WordPress design needs. And thanks again to Modis and to Tim and Rebecca for the venue and the refreshments!

Good questions and a bunch of tips from everyone else attending rounded out this excellent session. We've got a great group going, and much talent on the move here in the "Bold New City of the South!"

WebGUI versus WordPress: An overview


A different, and more detailed albeit slightly dated, feature comparison can be found at CMS-Matrix.

In general, WebGUI tends to bundle the most-used features, whereas WordPress leaves most of them to plugins. WordPress does have a vibrant plugin and theme community, but they are often outmoded and of varying quality.

WordPress, hosted on typical Shared or VPS

WebGUI typical V8




Template System

Theme files, written in PHP


HTML5 Framework

None by default. Built-in jQuery conflicts with Bootstrap.

YUI among others [wikipedia]

Object Orientation

Partly, built-in PHP




MySQL, possible PostgreSQL support

Web Server



Web Server Linkage


Plack [2]plackup, starman and starlet


One WP install can serve multiple sub-sites, but many global variables mean unrelated virtual hosts require entirely separate installs

Object-oriented, so theorietically possible to have a single installation serve unlimited unrelated virtual hosts

  1. Particularly Moose attributes, method modifiers and roles.

  2. Plack::Response and Plack::Request objects

Prevent WordPress from asking FTP details


When installing a new plugin, or upgrading an existing theme, plugin, or WordPress itself, you may be asked for FTP details. But, you say, I thought I had this configured to update directly. Here's how to force WordPress to upgrade without FTP.

In your wp-config.php file, add a line near the top:

define('FS_METHOD', 'direct');

This forces WordPress to write to files directly. Once this is done, you will get error messages that better explain what isn't working.

For example, you may need group write privileges on the wp-content/upgrade directory:

chmod g+w wp-content/upgrade

If you get this error:

Could not remove the old plugin.

you will also need to ensure there is group write on all the plugins themselves:

chmod -R g+w wp-content/plugins

WebGUI: Kickstarter for a Modern Perl CMS


UPDATE: The Kickstarter project reached its funding goal! Codename for Version 8 will be Allium Cepa. There is a project page on GitHub.

Scott Walters' 2014 Kickstarter, "Create Perl Competition to the PHP Content Management System" is somewhat open ended as to what this Perl-based CMS would be, but likely it will be based on the GPL'd WebGUI system created by Plain Black Corp. According to Scott's writeup,

…Version 7 is still being maintained, but 8 was a massive modernization effort that reworked core to use Moose, Plack, Try::Tiny, and cleaned things up.

Thanks to fantastic test suite coverage, the API and core of 8 work well, but the rewritten admin needs attention. Also, WebGUI has traditionally targeted large companies, so the difficult install process was not a major liability. To compete, installation has to be dead simple. The themes are not adequately modern (which is to say they look a little outdated).

I plan to get wG8 out of alpha, move it to a community development model, finish the installer I created for it and OSX support, and work with designers to create a modernized theme.

The installation script is currently Curses based, eliminating the web hole even in the first steps. A Docker install may also be included.


…wG is one of the most impressive and mature things ever created in Perl, and the community often raves to me about how much better they like it than competing systems.

− scrottie in the WebGUI Forums

More from scrottie (July, 2014): Perl Needs a User Friendly CMS [blogs.perl.org]


From the Abstract, "Programming WebGUI: WebGUI 8 as a Web App Framework" by Scott Walters, (October 2011)

the WebGUI content management system.

Building apps on top of CMSes has become trendy in the Python and PHP camps, and for good reason: CMSes provide the primitives to build the most common types of Web applications, they're easy to interface with, and the idea of a tree of editable objects translates well to interactive Web sites.

WebGUI ships with a pile of ready to use pieces of logic (called "assets", implementing things such as shopping carts and Wikis) for laypersons to build a site out of, but it's also a fantastically programmer friendly framework for building more of these assets in.

WebGUI 8 is the upcoming iteration, sporting a new Plack interface, Moose attribute based asset definition, and countless modernizations and improvements. WebGUI handles the tedious work of data persistence, permissions, generating edit forms, pagination, and more.

See Also

Mass Editing Posts' Timestamps to Attachment Dates


I had migrated a portfolio website to WordPress, and used the Add Media from Server plugin to make the various files into attachments. I made sure to check the option that makes the attachment's date equal to the file's timestamp.

Then I added the various posts to the site, and used the Change Attachment Parent plugin to attach the various media files to their proper parent post.

The final step was to set each post's publish time to the date of that post's newest attachment. A bit of MySQL wizardry does this:

update wp_posts as pp
      inner join(
        select post_parent as pic_parent, ID as pic_id, max(post_date) as pic_date
        from wp_posts
        where post_parent>0 and post_type='attachment'
        group by post_parent
      ) as attach
      on pp.ID=attach.pic_parent
   set pp.post_date=attach.pic_date, pp.post_date_gmt=attach.pic_date;