Flutter: WordPress Custom Fields Made Easy
For the past few years I have been referring clients to WordPress as my preferred CMS solution. I have found WordPress to be a wonderful solution for many of my clients. There are a few areas that could use some improvement, but honestly I don’t know of a perfect CMS out there, do you? As most WP developers know, custom fields are the key to using it as a successful CMS, and there have been some major improvements in last few years to help make it easier to implement custom fields into your template files, but in my experience it seems that not all of my clients fully understand how to use custom fields they way they are built into WordPress by default.

There are ways to hack around and make it easier for your client, I even wrote an article over at Foraker.com that explains how incorporate the power of custom fields in WordPress, and this way may be easy to understand for people familiar with WP and PHP but for my clients I feel that the default layout of using custom fields is a little hard to understand. Mostly I have had issues with clients wanting to the custom field to be an image and the only way to do this is for the client to upload the photo first via the media up-loader and then insert the path in the custom field value. Wouldn’t it be nice if the custom field just had an upload feature associated with it? Also, sometimes my clients are unsure if they can stray from the ones I preset for them and just start creating their own custom field names and values. This is an issue as they are unaware of the variable calls that need to be placed in the post/page templates as well. Overall I feel it’s just not as easy as it should be. This is where Flutter comes in.
What is Flutter?
Good question. From the words of Freshout, the creators of Flutter, “Flutter is a feature rich WordPress CMS plugin that focuses on easy templating for the developer and simplified content management for the admin by creating custom write panels that can be fully customized.”
A big bonus of Flutter is that it allows you to remove the “generic” page/post buttons from your WordPress dashboard navigation and input new custom buttons that will help categorize the website’s content in a way that is easier for your client to understand. An example would if you have a cleint that will be publishing multiple types of posts, such as news or events. Instead of having the client manage these in one general section titled “posts” and hoping/praying that they remember to make sure they apply the correct template and custom fields. With Flutter you can create two custom sections, one titled “News” and the other “Events”. The client would then use these new buttons to manage posts according to their type, and the post edit screen will already have the associated template, category and custom fields preset. Pretty sweet huh?!? Alright then lets move on to the setup and installation of flutter.
Getting Started
Installing Flutter:
- Download the plug-in here
- Unzip the file and upload it to your plug-ins directory (/wp-content/plugins/)
- You will need to create a few additional folders on your server, and make sure they are writable:
-/wp-content/plugins/fresh-page/thirdparty/phpthumb/cache/
-/wp-content/files_flutter/
-wp-content/files_flutter/modules/ - Now login to your WP site and activate the plug-in (/wp-admin/plugins.php)
That’s it. You should now notice 2 additional buttons in your dashboard navigation. One is a completely new tab titled “Flutter”, in this section you will create all of your write panels (custom templates) and write fields. The second is sub link under the “Settings” tab. This section will help you set a few global settings for flutter, as well as WordPress in general.
Custom Write Panels
Custom write panels are basically custom templates for posts and pages. Once you click on the the “Write Panel” link from flutter menu you will be given the option to manage current write panels, import a write panel or create a new one.

Let’s create a new panel:
- Click on the button “+ Create a Write Panel”
- Now decide if the template will be for a post or a page (depending on your decision here, the options below may differ)
Options for a post:
- Give it a name
- Chose what categories posts created in this write panel will automatically be assigned to
- Decide whether there will be multiples of this type of post
- Set what fields the client will see on the edit post screen
- Then set your advanced fields, FYI – sometimes the fewer options your client has to dig around in, the better.
- Now click finish
Options for a page:
- Give it a name
- Choose a page template that pages in this write panel will use by default
- Decide whether there will be multiples of this type of page
- Set what fields the client will see on edit page screen
- Then set your advanced fields, FYI - Again, sometimes the fewer options your client has to dig around in, the better.
After you have a write panel created (template), the next step is to add custom fields to that panel.

- To create a new custom field click on the “+ Create a Field” link
- Give it a name, this is the name you will use for your variable call so keep it simple
- Label your field, this the title that the field will be given on the edit post/page screen
- Decide whether or not the user can duplicate this field and add multiple entries of the same type of content
- The order you would like to appear on the edit post/page screen
- Set whether or not this field is required or not (if this set to required, the client will not be able to publish this post/page until a value is entered)
- Type: Flutter offers multiple types of fields which a great bonus! For example now you can set this field type as image and on the edit post/page screen the user will have the option of uploading an image or entering a url path. Nice!
- Press continue to add the field. From here add as many custom fields as you wish for this particular panel
Template Configuration
The next step is to call these custom fields to appropriate spots in your post/page templates. There are few different ways to go about this, as your field values may serve various purposes. Below I will outline the more general calls for flutter fields along with how to display multiple fields as the Freshout documentation is limited and a little hard to understand.
To call any custom field value we are going to use the php echo construct. Also just to note that any of these calls should be used within the_loop.
Basic Variable Call
<? echo get('variable'); ?>
Get an Image with Image Tags
<? echo get_image('variable'); ?>
Get Multiple Check Box Values
<? $checks = get('variable');
$output = "";
foreach($checks as $check){
$output .= "<span>$check,</span> ";
}
echo $output;
// or return $output
?>
Display Duplicate Fields
<?php
$total = getFieldDuplicates('variable',1);
for($i = 1; $i < $total+1; $i++){
echo get('variable',1,$i);
}?>
Display Duplicate Groups
This one is a little bit tricky as instead of just duplicating one custom field, we are duplicating a group that may contain multiple custom fields. In the example below we are calling a group of fields that can be duplicated. When using “getGroupDupliates(‘variable1′)”, we can replace variable1 with any field name from that particular group. For this call we are displaying a group that contains a field name of “variable1″. Then we begin to display the values which are a thumbnail with the value of “variable2″ that has a title value of “variable1″. Then we are wanting this thumbnail to link to the value of “variable3″.
<?php $total = getGroupDuplicates('variable1');?>
<?php for($i = 1; $i < $total+1; $i++):?>
<?php echo "<li>";
echo "<a title=\"" .get('variable1',$i,1). "\" href=\"";
echo get('variable2',$i,1);
echo "\">";
echo "<img src=\"" .get('variable3',$i,1). "\" alt=\"\" />";
echo "</a>";
echo "</li>"; ?>
<?php endfor;?>
The End Result
Once we have our write panels configured and our custom field calls placed in our WordPress template files we should be ready to rock and roll!
Oh and when creating your write panels and custom fields don’t feel like you have to have everything set in place right away. If the purpose of a write panel changes and you need to add/remove custom fields you can do this at any time and the changes will be made to any current or future posts/pages.
Flutter takes a little time to get used to but once you are able to get in a really play around with it you’ll begin to realize the potential it can have to make the use of custom fields much easier for you and your client.







Recently came across your site…somewhere, and I’ve been admiring your style. Clean, clear and attractive – all elements I’d like to focus on more as I expand my portfolio.
Also, this article was timely as I’ve just been getting into using WordPress as a simple CMS. Thanks!
Joel T
@Joel, thanks for the kind words man! Good luck in expanding your portfolio, and I hope this article is able to help you in offering WordPress as a solid CMS option.
Good stuff. We’re moving our sites to incorporate Flutter as well since it is a more organic model for content entry using WordPress. What we used to do, however, is to assign Categories for items like News and events, and just train the client to enter content and check the required category. Using a combination of query post and conditional statements, the required info would be displayed ont he front-end and everybody was happy. With teh advent of more complex sites, and of course, the need to just make things easier for the client, we are overhauling things to incorporate Flutter. Good tut, mate.
Great article to read! Just what I needed to know. One question though displaying “Duplicate Groups” I have a field for email in the group I am duplicating, but there will be some entries without an email. I am getting the first person’s email being called in instead when it should be blank. In flutter, I do not have it being required either. How would I get around this?
Disregard that last comment I figured it out what was wrong. Still a great article!
@Allen – Thanks for the comment! I’m glad you were able to figure out what was wrong. Best of luck with your WP site.
great post, has been useful, thanks.
Thank you thank you thank you.
You do a great job explaining how to use this plugin.
Better than the plugin website!
I have run into an issue working locally: get_image($whatever)
returns paths like this:
Luckily it works on my *nix Server. Any ideas how to fix this?
Either way, I still deeply appreciate your blog post!
Thank you thank you thank you.
You do a great job explaining how to use this plugin.
Better than the plugin website!
I have run into two issues in working with images.
No idea if you can help, but figured I might post my experience.
PATHS
locally: get_image($whatever) returns paths with the path separators in the wrong position for windows. \ versus /
Luckily it works on my *nix Server.
MULTIPLE IMAGES
In the admin screen I see 4 images.
Your example was very helpful to set up a loop.
Unfortunately image1 is okay, image2 is okay, then the rest are all copies of 2!
I really like the interface but I need to figure this bug out.
I deeply appreciate your blog post!
Can’t wait to use this plugin, and thanks for the explanation! It should no doubt make my clients lives easier.
Great post!
my field duplicates does not show up no matter what i try
Nice post. I have been using Flutter for a while to turn WP into a full fledged CMS. However, I recently found a plugin called Magic Fields, that seems to be gaining a more active user/developer base. Check it out at http://magicfields.org/ for more.
These guys have taken Flutter as the baseline and are adding features and goodies to it. Again, the support and activity by the developers is great, making it way easier to tackle hard-to-answer questions.
Really Great Work
you rocks their website .. they have no good documentation or FAQ at less
Thank you From Champions Of Africa ( Pharaohs ) ;)
Thanks for this article. The first one who explains it from A to Z!
thanks for this! Much needed clear explanation of how to template.