The Acumen software design blog provides you with helpful articles about CMS Development.

This web site provides a good overview.

CMS Wikipedia

acumen consulting php development

The Pros and Cons PHP 7.0 Migration

With the planned date for PHP 7’s release rapidly approaching, the PHP internals group is hard at work trying to fix our beloved language as much as possible by both removing artifacts and adding some long desired features. There are many features we could discuss, but in this post, I’d like to focus on three that grabbed my attention.

Recently 5.7 has been moving down the ladder in favor of web developemnt directly to 7. What this means there will be no new version between 5.6 and 7 – even if the new version was only to serve as a warning light to those still stuck on outdated code. Originally, 5.7 was not supposed to have new features, but was supposed to throw out notices and warnings of deprecation about code that’s about to change in v7.

It would also warn about some keywords that are to be reserved in PHP 7, so that people can bring their code up to speed with a sort of “automatic” compatibility checker in the form of an entire PHP version. The thing is, however, as I argue in the newsletter, that most people technologically competent enough to follow PHP in its upgrade path by keeping up with the most recent version aren’t generally the type of people to actually be using code that might break in PHP 7.

Return Types

With a vast majority voting “yes”, PHP is finally getting return types.  Starting with PHP 7, we’ll finally be able to indicate proper return types on functions in the form of:

function foo(): array {
    return [];

An improvement? Definitely! But perfect? Sadly, no:

  • the return types can only be what we have for types right now, meaning no scalar values, no return types like string, int, bool, etc. This means that your methods and functions that return such values will still be unsigned. You can remedy this by returning instances of wrappers for such values, but that’s overkill in the vast majority of cases.
  • no multiple return types. If your function returns either an array, or an Iterator object, there’s no way to indicate that via, for example, array|Iterator as we do in docblocks.

Some people also complained about the type declaration being after the closing parenthesis of the argument list, rather than before the function name, but to me, this is nitpicking. Popular languages such as modern C++ use the “after” syntax, and like the RFC states, this preserves the possibility of searching for “function foo” without any necessary regex modifications. What’s more, this is in line with what HHVM uses, so it’s an added unintended compatibility bonus.

Some complaints are about the “strictification” of PHP, but you really find the value of this when you start coding against interfaces or inheriting other people’s code. Besides, as long as it’s optional and its existence does not in any way affect PHP’s general performance or stability, there’s no harm in it. Complaining about it is, to me, akin to complaining about OOP being added to PHP when procedural spaghetti worked so well for most cases back then. Languages evolve, and this is a step in the right direction.

Removing Artifacts

The upcoming version proposes to remove PHP4 style constructors.  Communities anger on this makes me wonder – if you’ve kept such a codebase alive for so long, is there really a need to upgrade to PHP 7? And if there is a need to upgrade to PHP 7, is it not easier to simply hunt down the offending classes and fix their constructors? Surely this is something you can delegate to juniors, given enough unit tests in your code base to make sure it all goes well? And if you don’t have unit tests, if your app is a mess, do you really hope to benefit in any way from moving to PHP 7? Wouldn’t you be better off Modernizing your Application first?

The sentence “This means that code which I wrote 10 years ago should still run today, and should still run 10 years from now.” is, to me, madness – you definitely and absolutely should not expect this of ANY language across major versions.

Granted, some coders are right in that it would take effort to remove the feature, while it would take none to leave it in. But in the long run, it will take more collective effort to fix the problems these constructors sometimes cause, than to remove it now.

My advice to those fearing PHP 7 is – stop. If you don’t want to upgrade, don’t. If you could be on 5.3 or 5.2 for so long (looking at you, CodeIgniter), you can be on 5.6 for another decade – but let us have modern PHP. Leave progress up to those who are willing to accept it.

Scalar type declarations

Scalar type declarations come in two flavours: coercive (default) and strict. The following types for parameters can now be enforced (either coercively or strictly): strings (string), integers (int), floating-point numbers (float), and booleans (bool). They augment the other types introduced in PHP 5: class names, interfaces, array and callable.

// Coercive mode
function sumOfInts(int ...$ints)
return array_sum($ints);
}var_dump(sumOfInts(2, '3', 4.1));


The quick list of changes:

  • PHPNG (next generation of Zend Engine)
  • Scalar type declarations
  • Return type declarations
  • Spaceship operator
  • Anonymous classes
  • Generator return expressions
  • Generator delegation
  • Performance
  • Error handling (Exceptions)
  • Extension API changes


As usual, there’s no shortage of drama in PHP land. Like all major revolutions throughout history, the 7 revolution will also be spilling some blood before producing something awesome. PHP 7 is still a long way off, so even if you’re caught in the crossfire of musket shots, there’s ample time to get to cover. Unless you’ve been sleeping under tank tracks, then there’s little either side can do to help you.

What do you think of these RFCs? How do you feel about PHP 7 in general? Is it heading in the direction you’d like it to head in? Let us know – we want to hear your thoughts!


The latest variation of WordPress CMS is packed with your typical functions, maintaining ease-to-use functions and for that reason, the listing of functions has increased greatly over the years, along with theme variety makes it easy to generate income.

If you also include excellent plug-ins, Constant Updates, a WP Support community that is second-to-none, SEO made super easy and just Setting up a WordPress website is affordable.

Nevertheless besides blog writing tool, WordPress is among the very best platform for Web Development, uncomplicated to utilize and also versatile.

Why WordPress Development is very useful for business

1. It is Safe and secure.
Since WordPress is a popular CMS, it should not be surprising that it’s a target for hackers. The WordPress take the the secuity of its user very seriously.
2.It is  Easy to use.
The WordPress is very easy it is to use. The platform is user-friendly, intuitive and easy to learn. In fact, you can learn how to use wordPress in a matter of minutes.
3. Lots of support.
WordPress is provides lots of support. This is in part to the extensive WordPress community where you can troubleshoot any question or concern through the WordPress
4. Easy to manage
WordPress is equipped with a built-in updater for security purposes, WordPress also notifies you whenever there are updates for your themes and plugins. This makes managing your WordPress  site a breeze, since you’ll always be current on the latest updates. That will keep your site safe and fresh.

8 Awesome WordPress Web Apps Paving the Way for WordPress as a SaaS Platform

Sometimes you need a web app and don’t have the time, skill, or budget to do custom development. Developing from scratch can be the solution for many problems, but it can take much longer than starting from an existing code base.

WordPress was originally designed as a blogging platform, and it continues to be well known for that. However, it has evolved into a fully fledged content management system (CMS) and, for some purposes, can even produce a solid web application – quickly, and at a significantly lower budget than custom development.

This article will introduce the idea of building a web app on WordPress, show you why you might consider it, examine some tools for building web apps in WordPress, then look at some great examples of what is possible.

Why Use WordPress for Web Apps?

Web apps can be custom coded from scratch, and many developers remain purists who feel that’s the only way to go. However, web application frameworks have been developed to help make the process of building web apps easier.

Ideally, building a web app would be quick to start, so you could get going and take advantage of some common built-in functionality. Wikipedia defines a Web Application Framework as:

…a software framework that is designed to support the development of web applications including web services, web resources and web APIs. Web frameworks aim to alleviate the overhead associated with common activities performed in web development. For example, many web frameworks provide libraries for database access, templating frameworks and session management, and they often promote code reuse.

With that in mind, it’s not hard to see how some people started to look at WordPress as a possible web application framework to help them build web apps. Though not specifically designed for that, WordPress has several features that make it a solid choice for your web apps, for example:

  1. Security, user registration and login: WordPress has user roles, which by default belong to one of five access levels, and can be assigned to different capabilities (e.g. edit posts).
  2. Database and URL mapping: WordPress enables you to easily connect to its database and run queries. You can modify how URLs are generated using pretty permalinks and add or modify the rewrite rules.
  3. Theming: WordPress themes offer a very flexible means of designing pages for your app.

WordPress isn’t always going to be the best tool for all types of web apps. It can work well for simple CRUD (Create, Read, Update, Delete) apps, and more complex functionality like calendar bookings, for example, can be done by integrating existing plugins. In general, projects related to publishing some form of content online may be possible candidates for using WordPress, especially where you want to use the same content across multiple products (e.g. website, mobile app etc.).

Tools for Building Web Apps in WordPress

While WordPress does offer built-in features we can use for web apps, you may require additional functionality. The built-in page and post structures can be used for a lot of things, but if you need custom data and fields to be added, searched or queried, manipulated, and displayed, some additional work is needed. Fortunately, tools do exist to help expand on WordPress’ native capabilities.

WordPress does have custom data capabilities in the form of custom fields, post types and taxonomies, but tools for working with them have been left up to plugins. Here are a few that have proven quite useful in moving WordPress away from simple blogging:

1. Advanced Custom Fields

Advanced Custom Fields plugin

Available for free in the WordPress repository, Advanced Custom Fields (ACF) has been a long-standing favorite of developers for adding custom data functionality to WordPress. It provides a way to visually create custom data fields of various types (e.g. checkboxes, images, relationships) and easily load data through a simple API. It uses the built-in custom post types and metadata and so is easy to use and fast. For more content types and the ability to add options pages, you’ll need to purchase a licence for ACF Pro (which starts at $25).

2. Piklist

Piklist Framework

Billed as a rapid development framework for WordPress, Piklist enables you to easily create custom post types and taxonomies, add metaboxes and metafields to all the WordPress data types (posts, pages, media etc.), and create settings pages and widgets. The Piklist Framework can be downloaded for free from the WordPress repository.

3. Gravity Forms

Gravity Forms

Gravity Forms is an advanced form builder, and includes a lot of functionality that can help with web apps. You can create forms to do CRUD operations on posts, pages and custom post types, as well as take advantage of functionality like commerce, scheduling and logic. Gravity Forms starts at $39 for a personal licence which doesn’t include any of the add-ons.

4. Toolset

Toolset Types plugin

Toolset enables you to add custom types and fields to the WordPress admin and create ‘parent/child’ relationships between different types, to build relational-type databases. You can create custom page templates and archives for displaying searchable custom data. It also includes built-in functionality for creating front end forms for submitting content and editing. The Types plugin is free, but access to more advanced functionality requires purchasing the full Toolset (starts at $149).

5. WordPress REST API

WordPress REST API plugin logo

No discussion about using WordPress for web apps would be complete without considering the REST API, especially with a non-WordPress front end. Finally moving from the outskirts as a plugin into WordPress core, the REST API is changing the way apps interact with the WordPress back end, as shown in the recently released Calypso desktop app. We will be seeing more development in this area going forward as the code matures.

8 Awesome Web Apps Built on WordPress

Now that you have a broad understanding of how WordPress can be used as a web app framework and have familiarised yourself with a few of the plugins that can make life a lot easier in the process, let’s explore six awesome web apps built on WordPress that showcase just how capable the world’s favorite CMS is!


Trainrs web app provides a totally custom WordPress admin for managing personal trainers’ business. provides online business management for personal trainers. It uses WordPress as a foundation to give users hosted websites with customized administration of clients, training schedules, and billing. With the focus on users and custom data, WordPress makes easy work of this app.

2. YouTooCanRun

The YouTooCanRun homepage.

YouTooCanRun is a custom WordPress solution for managing the organization of marathon races, including paid registration of participants, generation of bib numbers and management of the event. It uses a combination of the Event Espresso and WooCommerce plugins to provide the needed functionality. As most of the functionality required was standard event and commerce behaviour, a WordPress solution combining plugins was perfect.

3. Pressbooks

Pressbooks web app

Pressbooks manages book content and prepares it for publishing.

Pressbooks is online book production software. They have both a hosted version and a WordPress plugin. You can create your book online and then export to various file formats for book publishing. The tool is built in WordPress using customized admin screens for managing book information, for example. Pressbooks focuses on content, so WordPress is a great tool for this.

4. Focused on Fit

The Focused On Fit homepage.

Focused on Fit is an online fitness community built on WordPress. Interesting features include a database of food and recipes with nutritional facts, and the ability to log your meals and exercise and track your progress towards your goals. It goes further and uses the REST API to pull that data into mobile apps for use on the go. The social aspect and user management makes this a good use case for WordPress.

5. StudyChurch

The StudyChurch homepage.

StudyChurch is a web app designed to help small church groups work through study materials together. It pieces together several WordPress plugins, such as BuddyPress, and a forum to enable users to write lessons that are available to group members who can then discuss and collaborate on the answers. With the focus on users management and content, this is a great use case for WordPress.

6. Nomadbase

NomadBase web app

The REST API powers this app as it pulls together location data for digital nomads.

Nomadbase is a real time map for digital nomads. Using location data from your social media apps (Facebook, Swarm, Twitter or Instagram), users’ past, present and future positions are shown on a city-level to other nomads to encourage connections and interactions. It is built using the REST API with a React and Leaf front end. This is an interesting use case for WordPress, focused on user data.

7. Code Cavalry

The Code Cavalry homepage.

Code Cavalry enables coding novices and web designers to connect with experts over Google Hangouts to solve problems. Though based in WordPress, the app interacts with Firebase through AngularJS. The developer outlines the approach taken in The Road to Code Cavalry. The focus of this app is the users and so using WordPress gave a good head start in development.

8. Hello Bar

The Hello Bar homepage.

Hello Bar is a ‘Software as a Service’ (SaaS) platform designed to help users monetize their websites by building an email list. It provides you with ways to promote content, get more subscribers and measure and test the effectiveness of your campaigns. For more detailed information on how the team approached the development of Hello Bar you can check out the series of articles they wrote. They took advantage of WordPress’ built-in user management with custom themes and plugins to provide an experience that looks nothing like WordPress.


While WordPress is not perfect or suited for all web application needs, it can be a very useful tool for certain types of web apps. Stop thinking of it just as a blogging platform and you can start to see the possibilities for using its existing structure to help bring a web app to life quickly and under budget.

We have provided you with several examples of web apps built on WordPress which should have provided some inspiration and food for thought as to how you can use WordPress for more than just basic websites.

Have you built a web app using WordPress? Please share your favorite tools and tips that we may have missed in the comments section below!

Article thumbnail image by ideyweb /

Article thumbnail image by Tom Ewer /


Our WP development team ran into a problem with the Media File Manager plugin by Atsushi Ueda in which the code was attempting to read from an array index that did not exist. This resulted in a Notice level error from PHP, and thus broke the file manager.  We think this utility is very useful to our CMS development, so we investigated a fix.



Here is the issue we ran into:
Notice: Undefined offset: -1 in /path-to-wordpress/wp-content/plugins/media-file-manager/media-relocator.php on line 236

Line 236 contains the following:
$dir1[$i]['thumbnail_url'] = mrelocator_path2url($dir . $dir1[$min_child]['name']);


Change this to the following to resolve the issue:
if (isset($dir1[$min_child])) {
$dir1[$i]['thumbnail_url'] = mrelocator_path2url($dir . $dir1[$min_child]['name']);




WP, plugin, PHP, CMS development

For information about how Acumen can help with your Software needs, contact us today!



DNN Navigation

DNN Navigation logo

Our CMS development team was working on a dotNetNuke site with a Navigation bar and added it to all pages. I then edited the Navigation bar, pulled off the Display on All Pages check box in the Settings dialog box, and then rechecked it. It would not display on all pages after this. This is apparently a bug in the DNN system and this is the workaround.


Go to Admin – Recycle Bin and Click “Empty Recycle Bin” button.

Then go back to the Module – Settings and recheck “Display on All Pages”. It should work.


I found help here.


See our CMS Development Page for more information on how we can help you!

Our ecommerce team was having trouble with Magento cron jobs, so we researched the various mechanisms to test and debug them.  The jobs did not run at the expected time and we couldn’t see why.


The Magento cron jobs run as apache.  You can see them by typing:

crontab -u apache -l

You can edit them with

crontab -u apache –e


To see if they are running without errors:

tail /var/log/cron


Also, the results of cron jobs are emailed to your apache user.  You can check that account with:

mail -u myApacheAccount

If you have problems with the cron job permissions, you will see them in the cron log or the mail messages.



For more information about how Acumen can help with your other IT needs, contact us today!


Magento is a powerful and open-source ecommerce platform that has gained a lot of popularity and has been the system of choice for many developers and online stores. Magento allows developers to extend the platform with custom payment options to allow them to make requests APIs and payment processing providers of their choice, such as PayTrace, iATS Payments or Stripe, to process their store’s orders. To do this, we will be inheriting and extending multiple classes such as:

  • Mage_Payment_Model_Method_Cc
  • Mage_Core_Helper_Abstract
  • Mage_Core_Controller_Front_Action
  • Mage_Payment_Block_Info
  • Mage_Payment_Block_Form_Ccsave

Most of the configuration work is just knowing what to hook up, so rather than go into detail I’ve provided the XML files and PHP files in this post. To build your own module, simply swap out the words “Acumen” with your project name (or namespace you want to use) and “Pay” with whatever you want to name the extension.

The real work is done in our extending of the Mage_Payment_Model_Method_Cc class inside of the app/code/local/Acumen/Model/Pay.php file. This is used when the order is submitted. You will see the capture and authorize functions, two of the functions called on submission.

Capture is to actually accept the payment for the sale. You will see that inside of that function, we use callApi and pass it the type of “Sale”. We can use that value to determine what API call to make (sale or authorize), or to simply pass it to the API.

Authorize is to check that the payment can be made, but it does not actually process the sale. Similarly to Capture, we pass a type parameter, this time using the string “Authorization”. Again, we can use this to manipulate our API call accordingly.

CallApi is where the request to the API is to be made, using a cURL request or otherwise. If the API successfully completed the authorization or sale, set $approved to true; otherwise, set it to false.

To view the source code, check out my GitHub repository.

If you’re looking for a custom extension for your Magento store or you need help setting up a Magento store and start selling, we can help. Check out our Magento page for more information.

A Magento theme is essentially a group of files that define the look, feel and overall layout of your store. Magento allows the use of multiple concurrent themes, and is not restricted to a single, active theme like WordPress. In this way, you can customize every aspect of your store while not having every page adhere to the same theme. This guideline will help you better understand the aspects and elements of a theme, as well as the basics of building your own.

NOTE: This tutorial does not cover theme installation. For instructions on how to install a theme please refer to this post.

Basic Model (In Hierarchal Order)

  1. Website Level – One or more store of the same customer/order information, shopping cart, etc.
  2. Store Level – A collection of store views. A container to group all related products.
  3. Store View Level – Essentially Store Level, but slightly different. Typically used to display Stores in different languages. (French, German, etc.)

*Multiple sites and stores can be run off of one single Magento installation.


Magento uses “blocks” in order to represent different components and functionality. These blocks make it easier for developers and theme designers to customize the functionality/look and feel of their store. There are two types of blocks in Magento:

Structural Blocks – These are the containers for the Header, Footer, Right/Left Columns and Primary Area (or Main Content Area). Some examples of structural blocks have been highlighted below in red.

Pix 1

Content Blocks – These are blocks within structural blocks. Site navigation, callout, category listing, etc. These can be static images, widgets, etc. Some examples of content blocks have been highlighted below in green.

Pix 2

File Types

Skins – This file type contains your CSS/images/JavaScript files.


Pix 3

Layouts – This file type defines structural blocks and can be edited via the .xml files it contains.


Pix 4

Templates – This file type defines content blocks and can be edited via the .phtml files it contains.


Pix 5

Locales – This file type defines the language of your Magento store. For example a locale might translate store elements to Spanish. Locale files are stored as .csv.


Pix 6

Design Package/Themes

Base Theme – The bottom level theme and final place that Magento looks to.


Custom Theme – Your own custom theme. Magento looks here first.


Package – A group of related themes. You can create your own or use the already available ‘default’ package.


Disabling the Cache

To prevent your store from being slow to load, Magento has a built-in caching system which reduces the number of files needed to be reloaded every time a page is requested. While this is useful while your store is live, it can prove to be an inconvenience when developing.

To disable this feature temporarily log in to the admin panel and go to System | Cache Management. Here you can select/deselect any cache types that you wish to disable. For our purposes you can disable them all by selecting each one and selecting ‘Disable’ from the Actions drop-down menu.

Setting a Theme

You can set the package and individual themes that you wish to display in the backend of Magento by going to System | Configuration and clicking Design in the left-hand sidebar. Under Package you have your current package. Under Themes you will see each file type and which theme it’s being generated from.

* Themes can be changed for each individual page as well. CMS > Pages and then click the page you want and select Design from the left-hand sidebar.

Customizing Your Theme

When you want to edit a particular file, simply copy it from the base theme, paste it in your current theme and edit it from there. Any files copied in this manner will override the base files. Be sure to copy any folders that contain the files as well. For example, if we wanted to edit the login.phtml page used for our check out (located in app/design/frontend/base/default/template/persistent/checkout/onepage/login.phtml) we would need to create or copy the folder persistent and paste it in our custom theme template file.

This is the preferred method for changing files in Magento. Editing the base files directly is not a good practice because it can cause conflict when trying to upgrade Magento. Plus, if you make a mistake that is beyond repair you won’t be able to revert back to any older files.

Template Path & Block Name Hints

Two useful tools that Magento provides for locating file paths are Template Path Hints and Block Name Hints.

Template Path Hints – Displays the relative path to each block within the theme directory structure.

Block Name Hints – Shows you how the block is classed within the framework.

To enable these hints simply navigate to System | Configuration | Advanced | Developer. Make sure ‘Main Website’ or ‘Default Config’ is selected from the Current Configuration Scope drop-down in the top-left corner as the option is unavailable in the Default Config scope. Open up the Debug section in the right-hand column. From here you can switch Template Path Hints and/or Block Name Hints to Yes or No. Click Save Config at the top-right of your screen, and refresh the frontend of your store to view the changes. The hints should appear in little red boxes surrounding the elements they lead to.



Editing a Magento theme can be done easily and effectively once you know where to go for files, how to disable the cache and how to enable the template and block hints. I recommend setting up a development installation and trying your hand at making changes to the store views in your theme. For more information on Magento Theming, please see the following resources:



  • Good tutorials on Magento from the ground up. Specifically, #25 – #44.
  • Magento 1.4 Themes Design by Richard Carter.
  • This book covers a lot of material on theming in Magento. Specifically chapters two through six if you aren’t interested in reading the whole book.

See our CMS Web Development Page for more ways we can help you!

Nav Menu

There’s an interesting little quirk to Magento.

In Magento, the Navigation menu does not display even when you’ve told the particularly categories to show. There’s a quick fix to the problem but it’s good to know before you create an extensive category system.

The problem is that the Navigation menu relies on a particular Root category and if you change the default category or create a new Root category the Navigation menu doesn’t recognize it without a little tweak. Here’s how you can fix it.

  1. From the Catalog Menu select Manage Categories
  2. Click Add Root Category
  3. Name your Root Category (root-SITENAME)
  4. On the General Information Tab ensure Is Active equals Yes
  5. On the General Information Tab ensure Include in Navigation Menu equals Yes
  6. Click Save Category
  7. With the new Root Category Selected click Add Subcategory
  8. Create the subcategory of the main category making sure it is Active and Included on the Nav Menu
  9. From the Main Menu Systems – Manage Stores
  10. Click the Main Website Store link
  11. From the Root Category drop-down choose the Root Category you created earlier (root-SITENAME)
  12. Click Save Store

Any new categories you create should appear on the Navigation Menu.

As a side note, remember when you create Products on the Inventory tab add a number to the Qty field and change Stock Availability to In Stock otherwise products will not display in their Categories.

I hope that was helpful to people struggling with this issue. If you need help with your eCommerce Magento site we can. See our Magento Page and give us a call.

GA Codes 

GA Codes

At Acumen, we want to add Google Analytics on our WordPress installation, and we want the ability to track our posts and our pages separately using Google Analytics properties. We also want to keep our analytics more accurate by filtering out visits from our team members. To do this, we decided to build a free plugin, Smarter Analytics. Smarter Analytics allows you to:

  1. Apply different tracking codes to posts and pages
  2. Apply tracking codes on a per-post/per-page basis
  3. Filter out IPs from being tracked
  4. Filter out logged-in users from being tracked

GA Codes

When the plugin renders the script, it first makes sure you do not fall in the exclusion rules.

If you do, it comments out the script in HTML so users can see why the script has been commented out and what code would have rendered – this is very useful for testing!

But if the script is to be rendered, it first checks to see if the post has its own code setting.

Then, if it does, it renders. If not, it falls back to the post/page and global defaults.

Download the source code from the WordPress plugin directory and add Google Analytics to your WordPress installations with ease. (We’re using it on this site!)

Have a question about this plugin? Feel free to ask by commenting below.

For information about how Acumen can help with your software design needs, contact us today!