How much does Pods cost?
Pods is free and will remain free, but check out how much effort it’s taken to get it to where it is today!
Pods is free and will remain free, but check out how much effort it’s taken to get it to where it is today!
The Pods Framework has been around since late 2008. Planning, design, development, and testing started in 2010 for Pods 2.0 leading to an Alpha release on January 2nd, 2012. Beta was released on August 12th, 2012. Now Pods 2.0 has finally arrived, as of September 21st, 2012!
After our soft launch, we’ve been working on bug fixes for the past few weeks to ensure maximum stability and backwards compatibility before going full force with our 2.0 announcement. That point has been reached and we’re ready for the flood of new users that awaits, including our awesome Pods 1.x users who are anxious to upgrade.
Have at it, and most of all — Enjoy the freedom of developing any type of content with any type of field that you can think of for WordPress!
Please report bugs and suggest features in our GitHub Issues area. We’ve got an awesome feature line up for Pods 2.1 that is already in progress, we’ll announce our 2.1 testing program in the next month. Pods 2.1 is scheduled to be released alongside WordPress 3.5 on December 5th, 2012.
We have to really thank Automattic and Matt Mullenweg for all they’ve done to help us, we honestly could not have finished Pods 2.0 and taken it to the next level without their support.
RD2 provided some awesome UI design work for our new 2.0 upgrade screens.
MarkNet Group provided extra help when we needed it to keep the project going over the past two years, major kudos!
Below is a feature list that goes over what 2.0 offers, we hope you enjoy it as much as we have while we’ve used it on our own projects.
Holy Cow in a plugin Scott! I’ve been looking at it since Thursday afternoon and it’s absolutely wonderful. The UI is great, intuitive, and very forgiving when you’re making mistakes. Love seeing how far you’ve come with Pods as it is by far one of the most powerful plugins/frameworks/extendomatic-in-a-box things to to ever happen to WordPress.
I’m a big fan of how you re-vamped “Helpers”. Using it as a custom post type with the built-in WordPress revisions feature is spot on smart. This is honestly the first time I’ve ever looked at Pods 2.0 in any of its forms. The really cool thing to me is that you created “Helpers” in a way that provides flexibility and history. Using Code Mirror for syntax highlighting, storing it as a custom post type, and utilizing WordPress’ built-in revisions function takes “Helpers” light years beyond what it was in the 1.x.x releases. As a long time user of Pods I’m completely overjoyed with Pods 2.0!
Again, thanks for all that you’ve contributed to the WordPress community.
It’s messages like these that make what I do worth it. That’s exactly what I set out to do for Pods 2.0, so I’m very glad that was successful!
We spent some time tonight and landed on an enhancement we hope you will enjoy… We’ve broken out the Text, Paragraph Text, Number, and Date / Time fields into groups of field types!
Check them out in the beta now, or look below for a quick view of how it looks. You might even realize you missed a field capability you hadn’t noticed before
You can click the image above to enlarge.
We’re going to use this post to keep track of the deprecated functions and methods for you to reference at a glance. Pods 2.0 is backwards compatible, but we recommend you update your usage as you’re able to so you avoid any headaches down the road.
The Pod() class has had a makeover! Below are some new things you can do, we hope you enjoy the changes.
The Pod() class has been renamed to Pods(), your old code should point at the new class and methods though, but you should take advantage of the new usage which is much easier to use and understand.
// Get data for a pod $mypod = new Pod( 'mypod' ); // Get data for an item $mypod = new Pod( 'mypod', $id_or_slug ); // Maps to findRecords $mypod = new Pod( 'mypod', $params );
// Get the pod object $mypod = pods( 'mypod' ); // Get data for an item $mypod = pods( 'mypod', $id_or_slug' ); // Maps to the new find method $mypod = pods( 'mypod', $params ); // NEW! Get the pod object, find data, output each item using the template echo pods( 'mypod' )->find( $params )->template( 'template/name' );
// Get a field's value $value = $mypod->get_field( 'my_field' ); // Get the value of 'name' from the related field's item(s) $name = $mypod->get_field( 'my_related_field.name' ); // Order the return of the related field values $value = $mypod->get_field( 'my_related_field', 'name DESC' );
// Get a field's value $value = $mypod->field( 'my_field' ); // Get the value of 'name' from the related field's item(s) $name = $mypod->field( 'my_related_field.name' ); // Order the return of the related field values $params = array( 'name' => 'my_related_field', 'orderby' => 'name DESC' ); $value = $mypod->field( $params ); // NEW: Get the first value of the related items, just like get_post_meta( $id, $key, $single ) works $params = array( 'name' => 'my_related_field', 'single' => true ); $value = $mypod->field( $params ); // NEW: Get the first value of the related items, just like get_post_meta( $id, $key, $single ) works $value = $mypod->field( 'my_related_field', true );
// Get 15 records, ordered by name descending, where the name isn't Buster $mypod->findRecords( 'name DESC', 15, 'name != "Buster"' ); // Get 15 records, ordered by name descending, where the name isn't Buster $params = array( 'orderby' => 'name DESC', 'limit' => 15, 'where' => 'name != "Buster"' ); $mypod->findRecords( $params ); // Get 15 records, ordered by name descending, where the name isn't Buster $params = array( 'orderby' => 'name DESC', 'limit' => 15, 'where' => 'name != "Buster"' ); $mypod = new Pod( 'mypod', $params );
// Get 15 records, ordered by name descending, where the name isn't Buster $params = array( 'orderby' => 'name DESC', 'limit' => 15, 'where' => 'name != "Buster"' ); $mypod->find( $params ); // Get 15 records, ordered by name descending, where the name isn't Buster $params = array( 'orderby' => 'name DESC', 'limit' => 15, 'where' => 'name != "Buster"' ); $mypod = pods( 'mypod', $params ); // Get 15 records, ordered by name descending, where the name isn't Buster $params = array( 'orderby' => 'name DESC', 'limit' => 15, 'where' => 'name != "Buster"' ); $mypod = pods( 'mypod' )->find( $params );
// Add an item // It maps to PodsAPI::save_pod_item, does not pass the current ID $mypod->add( $params ); // Save an item // It maps to PodsAPI::save_pod_item, automatically passes the current ID for you $mypod->save( $params ); // Delete an item // It maps to PodsAPI::delete_pod_item, automatically passes the current ID for you, or you can set another $id to be deleted $mypod->delete( $id ); // Duplicate an item // It maps to PodsAPI::duplicate_pod_item, automatically passes the current ID for you, or you can set another $id to be deleted $mypod->duplicate( $id );
“The problem was fear of failure. When it came to my own work, I wanted all three — Features, Stability, AND On-time — and I didn’t want to accept my own limitations. Lesson learned, and since WordCamp San Francisco 2012, Pods 2.0 has now gone beta!”
“[a] benefit to me learning about Unit Testing is that I can now use that same knowledge to improve how Pods 2.x is developed while maintaining stability.”
#WCSF 2012 had a profound effect on me, I go into more detail about it on the RD2 blog:
http://www.rd2inc.com/blog/2012/08/my-time-at-wordcamp-san-francisco-2012/
Check out this new component we created yesterday. It can be enabled under Pods Admin > Components. It will walk you through the simple process of migrating your Custom Post Types and Taxonomies directly from Custom Post Type UI into Pods 2.0 — It will import all of your labels and settings, so you can now save all of that time instead of doing it manually.

Pods Contributors – If you’re looking to get Pods 2.0 credit (even if your work was redone or refactored), let me know via e-mail and I’ll make sure you’re listed on the official contributors list coming out soon. Please include your full name, your website, your podsframework.org username, the company you are with and the company’s site (if you wish a company to be listed).
Below is a full list of features for Pods 2.0, mostly highlighting new features / changes.
Which template engine have you decided to go with?
I’m seeing Pods as an alternative to ExpressionEngine, so I’m hoping it’s something similar to theirs. Smarty is as close as I could find. I’m a front-end only designer, hence why I prefer EE’s templating to WP’s, so I’m hoping it doesn’t end up being another language in itself.
That would be a deal breaker for me.
Heroframework.com uses it and that’s the closest CMS to EE out there.
We are sticking to our core template engine which uses {@field_name} syntax for outputting fields. It is definitely possible to filter before it hits our engine so you can override with any template engine you’d like. Good plugin idea for you
You may not have been aware of this, but Pods 1.x installs custom tables to store it’s information in a way that’s usually standard for standalone PHP projects. Here’s the table list we had in Pods 1.x, 7 core tables in all:
In Pods 2.0, we set out to develop code that performs better and to optimize our database table structures. In that process, we reduced the number of tables substantially down to 4 core tables in all:
While developing Pods 2.0, Automattic started giving us attention and moved forward to officially sponsor our development. We consulted with their server team over at their VIP hosting platform and determined that some of our 2.0 tables could be reduced even further. As a result, Pods 2.0 as of Alpha 32 now has only 1 core table in all:
Where did they all go? They’re now stored as post types and custom post meta fields. Don’t worry, you don’t have to learn new code, our API remains the same and you can now utilize our API to do even more. We interface with WP_Query and the WP object post/meta update functions. We’re also storing full Pods and their options in transients for even more performance and less MySQL queries per page.
It’s still not ready for primetime on the VIP hosting service, but in Pods 2.1, we’ll make our custom core tables completely optional. Individual Pod tables are already only created as an opt-in process when creating / extending content types in Pods 2.0, so that option will be removed if the tableless mode is enabled in 2.1. The wp_pods_rel table will also not be created or used, and instead the native meta tables for each content type will be used to store that relationship information. Pods 2.0 already stores a backup copy of relationships in wp_postmeta to make that transition easier.
We’re looking forward to further improving Pods throughout 2.x, thanks for hanging in there throughout our ever evolving project.
I think I’m missing something…
Wasn’t using custom tables for pods stuff lighter and with a smaller footprint than wordpress meta system?
We didn’t need as many tables as we had in 2.0 anyway, we could have accomplished the same thing with just two core tables, wp_pods and wp_pods_rel, where wp_pods served as the table to store Pods, Pod Fields, Pod Templates, Pod Pages, and Pod Helpers. But if we’re reducing tables, we might as well go into Post Types as the performance and footprint is greatly reduced through our usage of Transients and Object caching already. So, yes, on a data side it is a smaller footprint to have custom tables than to use Post Types and Meta, but reducing custom tables ensures that Pods can scale on larger hosts that have architecture-limitations when it comes to custom tables (Like WP VIP has, among others).
We’ll still have package import/export available just like in Pods 1.x.
Upgrading Pods to new versions has previously been a silent background process. Things were done, you weren’t given substantial information in case of an error, and there was no UI to guide you through the process. No more!
Our new Pods 2.0 Upgrade screens will guide you through upgrading from Pods 1.x to Pods 2.0, and any future upgrades that may be necessary throughout Pods 2.x – and it’s beautiful! Thanks to the incredibly generous RD2 team and designer Rey Latham for making this happen!
We’ve also partnered up with iThemes to offer 25% off of any BackupBuddy license! BackupBuddy is the all-in-one WordPress backup plugin that lets you backup, restore, migrate, and do it all locally or remotely to a number of different services. Together, we’ve got you covered for whatever your needs are during the upgrade process and beyond.
Aww man, looks awesome!
Nice and clean design that fits the admin theme. Great job!
Upping the requirements for Pods 2.0 to WP 3.4, it only makes sense that our next awesome version uses the latest and greatest, as support for previous versions would be something of a patchwork quilt with all the actions/filters/functions being unavailable, giving users a suboptimal experience with a reduced functionality plugin. It also will help reduce support issues!
Pushing our latest patches in and updating to Pods 2.0 Alpha 14 today. Prepping features for the beta testing period about to hit in a couple of weeks.
bjornet 8:23 pm on September 5, 2012 Permalink | Log in to Reply
I really appreciate you for showing this, this example helps me as developer to set a decent pricetag on my work and of cause understand the tremendous amount of work you guys have put into Pods.