Pods + WP = CMSSort of …
What do we want in a CMS?
• Flexible – Does different things• Robust – Does things well
Is Wordpress a CMS? Yes
• Wordpress is really good at publishing one kind of content: the Post
• Its interface is easy to learn and easy to teach. • Theming is especially powerful. Design
community• Plugins and custom fields provide additional
flexibility on a post by post basis.
Is Wordpress a CMS? No
• Major challenges customizing backend UI• All post types essentially the same• Custom fields difficult to work with in complex
ways• Scalability issues
So what?
• Time is money• Consultants need to maximize
functionality/time equation.
Custom Fields
• Good for on the fly customization• Bad for complex content types
Querying Custom Fields
$args = “meta_key=airline_name&value=American”;$args = “meta_key=arrives&meta_compare=>=&meta_value=DATE()”
query_posts($args);
Multiple custom fields?
function get_post_meta_multiple($metaDataList) {global $wpdb;
$querystr = "SELECT p.* FROM $wpdb->posts AS p WHERE p.ID IN ( ";
$querystr .= "SELECT post_id FROM $wpdb->postmeta WHERE ";$innerqry = array();foreach($metaDataList as $key => $value) {
$innerqry[] = $wpdb->prepare( "(meta_key = %s AND meta_value = %s)", $key, $value );}
$querystr .= implode(" OR ", $innerqry);
$querystr .= " GROUP BY post_id ";$querystr .= "HAVING count(*) = " . count($metaDataList);
$querystr .= ") AND p.post_status = 'publish' ";
$metaResults = $wpdb->get_results($querystr, OBJECT);return $metaResults;
}
Source: http://tinyurl.com/ldadam
Scalability
• Most wordpress users will never experience performance issues because the number pages just isn’t enough to matter.
• But consultants still need to be concerned.
Scalability
• All posts/types are in one table.• All custom fields are in longtext format which
means they can store up to 4GB.• Table sizes are effectively doubled by custom
fields 10,000 posts with 10 cfs each is like having 100,000 rows. Add in revisions and even simple queries become hogs.
So What are/is Pods?
• Not a plugin … really• Pods = Simple, scalable, CMS solution for
Wordpress.• Ultimate flexibility with being too time
intensive. • Frontend/Backend Customization a cinch.
Example: Flight List
Example: Flight List
Example: Flight List
Example: Flight List
Example: Flight List
Example: Flight List
Example: Flight List
Example: Flight List
Example: Templating
Example: Templating
<?php$flight = new Pod(‘flight’);$flight->findRecords(‘arrives ASC’, -1);echo $flight->showTemplate(‘flight-list’);?>
Example: Templating
Example: Templating
{@field.column}
Example: Templating
{@airline.name} - {@name}, {@departs} <br/>
Example: Templatinghttp://www.yourdomain.com/flights/
Example: Templatinghttp://www.yourdomain.com/flights/?airline=2
Example: Templating
<?php$flight = new Pod(‘flight’);$flight->findRecords(‘arrives ASC’, -1);echo $flight->getFilters(‘airline’, ‘Filter’);echo $flight->showTemplate(‘flight-list’);?>
Example: Templating
Example: Templating
<?php$form = new Pod('flight');echo $form->publicForm();?>
Example: Templating
Example: Templating
<?php$form = new Pod('flight');echo $form->publicForm();?>
<?php$form = new Pod('flight');$fields = array('name','arrive','depart');echo $form->publicForm($fields);?>
Example: Templating
Example: Templating
Showcase
Multiple custom fields?
function get_post_meta_multiple($metaDataList) {global $wpdb;
$querystr = "SELECT p.* FROM $wpdb->posts AS p WHERE p.ID IN ( ";
$querystr .= "SELECT post_id FROM $wpdb->postmeta WHERE ";$innerqry = array();foreach($metaDataList as $key => $value) {
$innerqry[] = $wpdb->prepare( "(meta_key = %s AND meta_value = %s)", $key, $value );}
$querystr .= implode(" OR ", $innerqry);
$querystr .= " GROUP BY post_id ";$querystr .= "HAVING count(*) = " . count($metaDataList);
$querystr .= ") AND p.post_status = 'publish' ";
$metaResults = $wpdb->get_results($querystr, OBJECT);return $metaResults;
}
Source: http://tinyurl.com/ldadam
Showcase
<?php$di = new Pod('distress_index');$di->findRecords('name DESC', -1, "t.un > 6.00 AND t.cpi < 2.00");echo $di->showTemplate('distress_data_table');?>
Scalability
• Using Custom Fields:– 600 rows x 6 custom fields = 3600 table rows
• Using Pods:– 600 table rows
Showcase
What about Custom Taxonomies/Post Types?
• Wordpress argues that custom taxonomies and the introduction of post types alleviates the need for excessive use of custom fields.
• But this only increases the scalability slightly, there are still problems for large sites.
Pods-nosis Negative?
• Because pods data is saved in separate tables, standard Wordpress post features are not available. (i.e. comments/akismet)
• Wordpress does not currently endorse the pods cms strategy and instead is pushing the “one post type fits all strategy”.
• Pods community is considerably smaller than the wordpress community.
Why use pods?
• Learn one plugin, build anything you want.• Your site has lots of relationships between
types of content.• Scalability is a concern. • Truly custom, customization
Summary
• There is no RIGHT way to use Wordpress as a CMS.
• Pods is a tool for developers, not users. • Pods is the most flexible/scalable CMS option
currently available for Wordpress.
More info?
• www.podscms.org• www.mikevanwinkle.com• @podscms, @mpvanwinkle
A Question?
• Should Wordpress.org abandon it’s own attempts to make WP a CMS? Can WP be everything to everyone?