<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>digitalize.ca &#187; WordPress</title>
	<atom:link href="http://digitalize.ca/cat/blog/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://digitalize.ca</link>
	<description>Owned, operated, and obliterated by Mohammad Jangda</description>
	<lastBuildDate>Tue, 27 Dec 2011 17:17:15 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4-beta3-20574</generator>
		<item>
		<title>Co-Authors Plus v2.6</title>
		<link>http://digitalize.ca/2011/12/co-authors-plus-v2-6/</link>
		<comments>http://digitalize.ca/2011/12/co-authors-plus-v2-6/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 17:17:15 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Plugin Update]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1998</guid>
		<description><![CDATA[Co-Authors Plus v2.6: Search user’s display names, change byline order and more &#124; danielbachhuber. Thanks to Daniel, Co-Authors Plus, which I&#8217;ve long neglected, finally has an update with some long-overdue bug fixes and some sweet new features.]]></description>
			<content:encoded><![CDATA[<p><a href='http://danielbachhuber.com/2011/12/22/co-authors-plus-v2-6-search-users-display-names-change-byline-order-and-more/'>Co-Authors Plus v2.6: Search user’s display names, change byline order and more | danielbachhuber</a>.</p>
<p>Thanks to Daniel, <a href="http://wordpress.org/extend/plugins/co-authors-plus/">Co-Authors Plus</a>, which I&#8217;ve long neglected, finally has an update with some long-overdue bug fixes and some sweet new features.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2011/12/co-authors-plus-v2-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On $wpdb-&gt;prepare</title>
		<link>http://digitalize.ca/2011/11/on-wpdb-prepare/</link>
		<comments>http://digitalize.ca/2011/11/on-wpdb-prepare/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 19:30:08 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[wpdb]]></category>
		<category><![CDATA[wpdb-prepare]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1982</guid>
		<description><![CDATA[If you do the following, you&#8217;re a terrible person: There is absolutely no reason for prepare to be on a separate line. Here&#8217;s how you do it the right way: One line. Simple, easy to read, and not confusing.]]></description>
			<content:encoded><![CDATA[<p>If you do the following, you&#8217;re a terrible person:</p>
<pre class="brush: php; title: ; notranslate">
$query = &quot;SELECT ID from {$wpdb-&gt;posts} WHERE ID = %d&quot;;
$query = $wpdb-&gt;prepare( $query, $value );
</pre>
<p>There is absolutely no reason for <code>prepare</code> to be on a separate line.</p>
<p>Here&#8217;s how you do it the right way:</p>
<pre class="brush: php; title: ; notranslate">
$query = $wpdb-&gt;prepare( &quot;SELECT ID from {$wpdb-&gt;posts} WHERE ID = %d&quot;, $value );
</pre>
<p>One line. Simple, easy to read, and not confusing.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2011/11/on-wpdb-prepare/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>WordPress Distraction-Free Skin: Terminal/Matrix</title>
		<link>http://digitalize.ca/2011/08/wordpress-distraction-free-skin-terminalmatrix/</link>
		<comments>http://digitalize.ca/2011/08/wordpress-distraction-free-skin-terminalmatrix/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 17:21:23 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[distraction-free writing]]></category>
		<category><![CDATA[matrix]]></category>
		<category><![CDATA[terminal]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1844</guid>
		<description><![CDATA[Because all the cool kids want to feel like they&#8217;re writing posts in the Matrix. (Inspired by Zen)]]></description>
			<content:encoded><![CDATA[<p><img src="http://digitalize.ca/wp-content/uploads/2011/08/distraction-free-matrix.png" width="640" alt="Just Write! Like you're in the Matrix!" /></p>
<p>Because all the cool kids want to feel like they&#8217;re writing posts in the Matrix. (Inspired by <a href="http://wordpress.org/extend/plugins/zen/">Zen</a>)</p>
<p><script type="text/javascript" src="https://gist.github.com/1078876.js">;</script></p>
<p><noscript>
<pre>
<?php 
/**
 * Plugin Name: DFW Matrix
 * Plugin Description: Matrix-like Terminal style for WordPress' Fullscreen / Distraction-Free Writing mode. Styles borrowed from http://wordpress.org/extend/plugins/zen
 * License: GPL v2 Baby!
 */
add_action( 'admin_print_styles-post.php', 'dfw_terminal_style' );
add_action( 'admin_print_styles-post-new.php', 'dfw_terminal_style' );

function dfw_terminal_style() {
        ?>
        <style>
        .fullscreen-active,  
  	#wp-fullscreen-body,  
  	#fullscreen-overlay {
                background: #000 !important;
 	}
        #wp-fullscreen-body input[type=text],
        #wp-fullscreen-body textarea,  
        #wp-fullscreen-body #wp-fullscreen-title-prompt-text {
                font-family: Courier New, Courier, monospace;
                color: #00f91d;
        }
        </style>
        <?php
}
</pre>
<p></noscript></p>
<p><a href="https://gist.github.com/1078876">View on Github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2011/08/wordpress-distraction-free-skin-terminalmatrix/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>We are all WordPress</title>
		<link>http://digitalize.ca/2011/03/we-are-all-wordpress/</link>
		<comments>http://digitalize.ca/2011/03/we-are-all-wordpress/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 20:17:25 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[love]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1472</guid>
		<description><![CDATA[We all use it, we love it, and we want to learn it, teach others, and help WordPress become even better. We are all WordPress. &#8211; Jackie Dana]]></description>
			<content:encoded><![CDATA[<blockquote><p>
We all use it, we love it, and we want to learn it, teach others, and help WordPress become even better.</p>
<p>We are all WordPress.
</p></blockquote>
<p>&#8211; <a href="http://jackiedana.com/2011/we-are-all-wordpress">Jackie Dana</a></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2011/03/we-are-all-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dogfooding Edit Flow</title>
		<link>http://digitalize.ca/2010/11/dogfooding-edit-flow/</link>
		<comments>http://digitalize.ca/2010/11/dogfooding-edit-flow/#comments</comments>
		<pubDate>Tue, 16 Nov 2010 22:38:50 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Edit Flow]]></category>
		<category><![CDATA[HackIt]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[cronjob]]></category>
		<category><![CDATA[dogfooding]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[remote repos]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1327</guid>
		<description><![CDATA[Note: Most of the code here is specific to my environment on Webfaction, github and for use with WordPress plugins. You can make it work for other setups (i.e. different hosts, local gits, or even SVN) but will involve some tweaking. Scott recently had a great idea to run the bleeding edge release of Edit [...]]]></description>
			<content:encoded><![CDATA[<p><em><strong>Note:</strong> Most of the code here is specific to my environment on Webfaction, github and for use with WordPress plugins. You can make it work for other setups (i.e. different hosts, local gits, or even SVN) but will involve some tweaking.</em></p>
<hr />
<p><a href="http://www.scottbressler.com/blog/">Scott</a> recently had <a href="http://groups.google.com/group/editflow/browse_thread/thread/d7ef176adaf6e22">a great idea</a> to run the bleeding edge release of <a href="http://editflow.org">Edit Flow</a> on our official site. I usually do this for most of my plugins before releasing, though, it&#8217;s a manual process: FTP up the latest code and give it a test run. That&#8217;s not fun.</p>
<p>Here&#8217;s a far better, automatized way to keep your repo up-to-date. You can either use cron or githooks. Pick your poison.</p>
<p><span id="more-1327"></span></p>
<h3>Step #1: Clone-ify</h3>
<p>On the server, where Edit Flow would be installed, delete it (if it exists), and clone the github repo. (You have to <a href="http://docs.webfaction.com/software/git.html">install a git instance</a>, if you don&#8217;t already have one.)</p>
<p><script src="https://gist.github.com/701846.js?file=clone-edit-flow.sh"></script><br />
<noscript>
<pre>
cd /home/username/webapps/wordpress/wp-content/plugins/
git clone <a href="mailto:git@github.com">git@github.com</a>:danielbachhuber/Edit-Flow.git
</pre>
<p></noscript></p>
<h3>Step #2: Cron-ify</h3>
<p>Set up a <a href="http://docs.webfaction.com/software/general.html#scheduling-tasks-with-cron">cron job</a> to run every so often so that you don&#8217;t have to manually run &#8220;git pull&#8221; to stay up-to-date.</p>
<p><script src="https://gist.github.com/701846.js?file=git-cron"></script><br />
<noscript>
<pre>
1 1 * * * cd /home/username/webapps/wordpress/wp-content/plugins/edit-flow &#038;&#038; /home/username/webapps/git/bin/git pull
</pre>
<p></noscript></p>
<p>This job runs daily at 1:01am and does a git pull on the repo. On my site, the cron job is set to run daily; the Edit Flow site is set to update every couple of hours. Go with what works for you. Check out other <a href="http://www.linuxhelp.net/guides/cron/">options for cron jobs</a>.</p>
<h3>(Alternate) Step #2: Hook-ify</h3>
<div id="attachment_1331" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/post-receive-url.png"><img src="http://digitalize.ca/media/post-receive-url-300x128.png" alt="github gets POSTy" title="" width="300" height="128" class="size-medium wp-image-1331" /></a><p class="wp-caption-text">github gets POSTy</p></div>
<p>If you&#8217;re really adventurous, an update once (or even several) times a day isn&#8217;t enough for you. You want to live on the bleeding edge and update as soon changs are made! Thanks to <a href="http://www.kernel.org/pub/software/scm/git/docs/githooks.html">githooks</a>, you can do this fairly easily. Github takes it a step further and makes it even easier with <a href="http://help.github.com/post-receive-hooks/">Post-Receive URLs</a>:</p>
<blockquote><p>We’ll hit these URLs with POST requests when you push to us, passing along information about the push.</p></blockquote>
<p>Here&#8217;s a quick-and-dirty PHP script I cooked up that works with github&#8217;s Post-Recieve URLs.</p>
<p><script src="https://gist.github.com/701537.js?file=github-post-receive-pull.php"></script><br />
<noscript>
<pre>
<?php

// Edit these to match your environment settings
define( 'BASE_PATH', '/home/username/webapps' );
// This is the path to the git executable
define( 'GIT_PATH', get_full_path( '/git/bin/git' ) );

// Edit this array so the key matches the github repo name and the value is path of the repo relative to the BASE_PATH 
$repository_paths = array(
	'test' => '/git-test'
);

if( isset( $_POST['payload'] ) ) {
	$payload = json_decode( stripslashes( $_POST['payload'] ) );

	if( isset( $repository_paths[ $payload->repository->name ] ) ) {
		$path = get_full_path( $repository_paths[ $payload->repository->name ] );
		
		$cmd = sprintf( 'cd %s; ', $path );
		$cmd .= sprintf( '%s pull', GIT_PATH );
		shell_exec( $cmd );
		
		die( "Executed: $cmd!" );
	}
}

die( 'Dont\'t think you\'re sposed to be here...' );

function get_full_path( $path ) {
	return BASE_PATH . $path;
}
</pre>
<p></noscript></p>
<p>Upload this to your server and change the BASE_PATH, GIT_PATH, and $repository_paths to match your environment. On github, go to your Repo > Admin > Service Hooks > Post-Receive URLs and add the URL to the script. You can click on &#8220;Test Hook&#8221; to have github send you a test payload.</p>
<p>And you&#8217;ll probably want to delete the cron job, as that&#8217;s now redundant.</p>
<h3>Log-ify</h3>
<p>If you want to keep a log of what these scripts are doing behind-the-scenes for troubleshooting, just append the following to the cron job or Post-Receive script after the &#8220;git pull&#8221; call. This appends all output (errors and all) to a git.log file. Keep in mind that this file will grow over time, so prune early, prune often.</p>
<p><script src="https://gist.github.com/701846.js?file=git-log"></script><br />
<noscript>
<pre>
>> /home/username/git.log 2>&#038;1
</pre>
<p></noscript></p>
<hr />
<p><em><strong>Closing Caveat:</strong> I am, by no means, an expert on this topic. I&#8217;ve cooked up something that works for me, and it may or may not be The Right Way. Use at your own discretion.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/11/dogfooding-edit-flow/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Edit Flow v0.6</title>
		<link>http://digitalize.ca/2010/11/edit-flow-v0-6/</link>
		<comments>http://digitalize.ca/2010/11/edit-flow-v0-6/#comments</comments>
		<pubDate>Fri, 12 Nov 2010 17:01:49 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Edit Flow]]></category>
		<category><![CDATA[Plugin Update]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[story budget]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1319</guid>
		<description><![CDATA[We pushed out Edit Flow v0.6 last week. We&#8217;ve got a couple new features, cleanups, and bug fixes, all outlined on the official blog. Excellent work by Scott, Andrew, and Daniel (and anyone and everyone else who&#8217;s helped us along the way) on getting this out the door. More awesome coming soon, so stay tuned.]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/16680344" width="632" height="356" frameborder="0"></iframe></p>
<p>We pushed out Edit Flow v0.6 last week. We&#8217;ve got a couple new features, cleanups, and bug fixes, all outlined on <a href="http://www.editflow.org/2010/11/10/edit-flow-v0-6-custom-editorial-metadata-and-the-story-budget/">the official blog</a>.</p>
<p>Excellent work by <a href="http://www.scottbressler.com/blog/">Scott</a>, <a href="http://www.andrewspittle.net/">Andrew</a>, and <a href="http://danielbachhuber.com/">Daniel</a> (and anyone and everyone else who&#8217;s helped us along the way) on getting this out the door. </p>
<p>More awesome coming soon, so stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/11/edit-flow-v0-6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin: Introducing Custom Metadata Manager</title>
		<link>http://digitalize.ca/2010/11/wordpress-plugin-introducing-custom-metadata-manager/</link>
		<comments>http://digitalize.ca/2010/11/wordpress-plugin-introducing-custom-metadata-manager/#comments</comments>
		<pubDate>Mon, 08 Nov 2010 17:31:51 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Plugin Update]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[comment meta]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[custom metadata]]></category>
		<category><![CDATA[metdata]]></category>
		<category><![CDATA[post meta]]></category>
		<category><![CDATA[user meta]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1255</guid>
		<description><![CDATA[With the custom post type enhancements introduced in WordPress 3, site builders and plugins developers now have access to what you could call &#8220;dynamic scaffolding&#8221;. With a couple of lines of code, you can easily generate the necessary UIs to help users easily manage and create new types of content. You can add new post [...]]]></description>
			<content:encoded><![CDATA[<p>With the <a href="http://kovshenin.com/archives/custom-post-types-in-wordpress-3-0/">custom post type enhancements</a> introduced in WordPress 3, site builders and plugins developers now have access to what you could call &#8220;dynamic scaffolding&#8221;. With a couple of lines of code, you can easily generate the necessary UIs to help users easily manage and create new types of content. </p>
<p>You can <a href="http://codex.wordpress.org/Function_Reference/register_post_type">add new post types</a> (e.g. Movies, Reviews, Products, Projects, etc.) and specify the features each should support (e.g. title, body, authors, revisions, etc.) . Beyond that, you can add use the ever-flexible hook and filter system to add your own features. Combine that with custom fields and you can add your own fields (so a &#8220;movie&#8221; post type can have new fields to add things like &#8220;release date&#8221;, &#8220;rating&#8221;, and so on) . </p>
<p>However the code involved in adding those additional fields can get cumbersome, especially when you start looking at lots of content types with numerous fields. Add in other object types like users and comments and you&#8217;re now looking at a huge code base that needs to be maintained, updated and so on.</p>
<p>Well, I&#8217;m making it easier.</p>
<h3>Overview</h3>
<p><a href="http://wordpress.org/extend/plugins/custom-metadata/">Custom Metadata Manager</a> introduces a very WordPress-like way of adding additional fields to your object types. The goal is to help you rapidly build familiar, intuitive interfaces for your users.</p>
<p>Consider this:</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-simple.php"></script><br />
<noscript>
<pre><?php x_add_metadata_field( 'field-1', 'post' ); ?></pre>
<p></noscript></p>
<p>That one line of code kicks into gear some of that &#8220;dynamic scaffolding&#8221; magic I mentioned earlier. The Edit Post page now has a metabox with a text field. The plugin handles all the heavy-lifting for you behind-the-scenes, so that you can focus on more on building out and connecting your data rather than all the minor details. Checkit:</p>
<div id="attachment_1276" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-single-field.png"><img src="http://digitalize.ca/media/custom-metadata-single-field-300x42.png" alt="A magical new field with one line of code!" title="A magical new field with one line of code!" width="300" height="42" class="size-medium wp-image-1276" /></a><p class="wp-caption-text">A magical new field with one line of code!</p></div>
<p>The API is similar to that used for registering custom post types and taxonomies so it should be familiar territory.</p>
<h3>Object Types</h3>
<p>But let&#8217;s not stop there. Let&#8217;s say I want comments and users to all have this magical new field. Let&#8217;s try something like this:</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-simple-all-objects.php"></script><br />
<noscript>
<pre><?php x_add_metadata_field( 'field-1', array( 'post', 'comment', 'user' ) ); ?></pre>
<p></noscript></p>
<p>And we get the same field added for users and comments!</p>
<div id="attachment_1277" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-single-field-user.png"><img src="http://digitalize.ca/media/custom-metadata-single-field-user-300x52.png" alt="A magical new field for users with one line of code!" title="A magical new field for users with one line of code!" width="300" height="52" class="size-medium wp-image-1277" /></a><p class="wp-caption-text">A magical new field for users with one line of code!</p></div>
<p><small><strong>Note:</strong> I&#8217;ve omitted a screenshot for comments since it looks exactly the same as the posts screen.</small></p>
<p>Custom Metadata Manager supports fields for:</p>
<ul>
<li>posts (built-in and any custom post types)</li>
<li>comments</li>
<li>users</li>
</ul>
<p>If/when links and taxonomies get metadata support, I&#8217;ll add support for them as well.</p>
<h3>Labels and Descriptions!</h3>
<p>Avoid cryptic slug-like names and make it easy for users by assigning friendly labels and descriptions!</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-labels.php"></script><br />
<noscript></p>
<pre>
<?php
x_add_metadata_field( 'field-1', 'post', array(
	'label' => 'Field Label',
	'description' => 'This is a friendly description for the field to help you enter your data.'
) );
?>
</pre>
<p></noscript></p>
<h3>Groups</h3>
<p>To avoid clutter on the Edit Post page, you can group sets of fields together.</p>
<p><script src="https://gist.github.com/665204.js?file=custom-metadata-group.php"></script><br />
<noscript></p>
<pre>
<?php
x_add_metadata_group( 'group-1', 'post', array(
	'label' => 'Group'
) );

x_add_metadata_field( 'field-1', 'post', array(
	'group' => 'group-1'
) );

x_add_metadata_field( 'field-2', 'post', array(
	'group' => 'group-1'
) );
?>
</pre>
<p></noscript></p>
<h3>Field Types</h3>
<p>Text fields can get boring, so I&#8217;ve cooked in a number of different field types (just specify the field_type in the $args parameter and go!):</p>
<div id="attachment_1278" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-field-types.png"><img src="http://digitalize.ca/media/custom-metadata-field-types-300x161.png" alt="All sorts of different field types" title="All sorts of different field types" width="300" height="161" class="size-medium wp-image-1278" /></a><p class="wp-caption-text">All sorts of different field types</p></div>
<h3>Custom Callbacks</h3>
<p>Notice that last one in the screenshot above? That&#8217;s using a custom display callback! You can override a bunch of different things (display callback, sanitize callback, etc.) to get even more control over the fields you add. That means you can do cool stuff like this:</p>
<div id="attachment_1279" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-custom-display.png"><img src="http://digitalize.ca/media/custom-metadata-custom-display-300x93.png" alt="Custom callbacks make custom fields even more fun!" title="Custom callbacks make custom fields even more fun!" width="300" height="93" class="size-medium wp-image-1279" /></a><p class="wp-caption-text">Custom callbacks make custom fields even more fun!</p></div>
<h3>Columns</h3>
<p>We&#8217;ll throw in an easy way to add your fields to the Manage Post/User/Comments pages as well (in your $args, just set display_column to true). By default, the column will just the value of the field, but if you&#8217;ve got something complex going on, you can just as easily include a display_column_callback.</p>
<div id="attachment_1281" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/custom-metadata-columns.png"><img src="http://digitalize.ca/media/custom-metadata-columns-300x211.png" alt="Columns made easy!" title="Columns made easy!" width="300" height="211" class="size-medium wp-image-1281" /></a><p class="wp-caption-text">Columns made easy!</p></div>
<h3>Example Code</h3>
<p>I&#8217;ve included fairly <a href="http://wordpress.org/extend/plugins/custom-metadata/other_notes/">detailed docs on Extend</a> and for kicks, I&#8217;ve thrown in <a href="http://svn.wp-plugins.org/custom-metadata/trunk/custom_metadata_examples.php">example code</a> along with the plugin. (To see it in action, turn on WP_DEBUG.)</p>
<h3>Why this plugin?</h3>
<p>Don&#8217;t get me wrong: this isn&#8217;t anything revolutionary. <a href="http://wordpress.org/extend/plugins/custom-field-template/">Lots</a> and <a href="http://wordpress.org/extend/plugins/verve-meta-boxes/">lots</a> and <a href="http://www.wpeasyposttypes.com/">lots</a> and <a href="http://podscms.org/">lots</a> have come before me. But my approach is probably the most &#8220;WordPress-like&#8221; there is (Bonus points to <a href="http://wordpress.org/extend/plugins/easy-custom-fields/">Easy Custom Fields</a> which uses a code-based and very object-oriented approach).</p>
<p>The API is simple, intuitive and very flexible, providing lots of overrides if you don&#8217;t like the default functionality (or have specific use cases).</p>
<p>The plugin doesn&#8217;t use extra tables and stores all data in a WordPress native way, so you can use the standard get_metadata function to retrieve your custom data. That way you also don&#8217;t have to worry about losing your data should you choose to stop using this plugin.</p>
<p>(I have already deployed and used the plugin across a number of production sites and it&#8217;s working great and saving me significant amounts of time and code!)</p>
<h3>Why a code-based approach instead of a UI?</h3>
<p>Because most of the plugins I mentioned above do the UI thing (and some it really well!) and it&#8217;d be lame to just copy them. The code-based approach, though, more closely aligns with the existing WordPress approach of registering new types of content (post types, taxonomies, etc.).</p>
<p>This is also a developer feature, aimed towards site builders. And real developers don&#8217;t need UIs ;)</p>
<h3>TODOs</h3>
<p>What stuff am I cooking up for future versions?</p>
<ul>
<li>Improved styling of rendered fields</li>
<li>Ability Pass in attributes for built-in fields (e.g. class, data-*, etc.)</li>
<li>Additional field types</li>
<li>Limit or exclude groups and fields for specific ids (e.g. show only on post id = 145)</li>
<li>Autosave support for fields on post types</li>
<li>Option to enqueue scripts and styles</li>
<li>Client- and server-side validation support</li>
<li>Add groups and fields to Quick Edit</li>
</ul>
<p>&#8212;-</p>
<h3>Download</h3>
<p>Grab it from the <a href="http://wordpress.org/extend/plugins/custom-metadata/">WordPress Plugin Directory</a> or just search for &#8220;Custom Metadata Manager&#8221; from the Plugin Manager within your WordPress install.</p>
<p>If you&#8217;ve read all the way through, thanks! Like what you see? Want more field types and features added? Just want say hi? <a href="mailto:batmoo@gmail.com">Get in touch</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/11/wordpress-plugin-introducing-custom-metadata-manager/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Plugin Update: Plugin Notes v1.1</title>
		<link>http://digitalize.ca/2010/10/plugin-update-plugin-notes-v1-1/</link>
		<comments>http://digitalize.ca/2010/10/plugin-update-plugin-notes-v1-1/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 17:01:47 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Plugin Update]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugin notes]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1263</guid>
		<description><![CDATA[I pushed out an update to Plugin Notes last week bumping up the version number to 1.1. Only three changes in this update: Ability to add select HTML tags to notes, so you can now do cool stuff like the image above. Full list of allowed tags available here. (Thanks to Dave A. for the [...]]]></description>
			<content:encoded><![CDATA[<p>I pushed out an update to <a href="http://wordpress.org/extend/plugins/plugin-notes/">Plugin Notes</a> last week bumping up the version number to 1.1. Only three changes in this update:</p>
<p><a href="http://digitalize.ca/media/HTML-Notes.png"><img src="http://digitalize.ca/media/HTML-Notes-300x182.png" alt="Paradoxical HTML Notes" title="Paradoxical HTML Notes" width="300" height="182" class="aligncenter size-medium wp-image-1267" /></a></p>
<ul>
<li>Ability to add select HTML tags to notes, so you can now do cool stuff like the image above. Full list of allowed tags <a href="http://wordpress.org/extend/plugins/plugin-notes/changelog/">available here</a>. (Thanks to <a href="http://www.boostpro.com">Dave A.</a> for the suggestion)</li>
<li>Fixed a bunch of PHP Error Notices that were popping up across the plugin (thanks to <a href="http://codex.wordpress.org/Editing_wp-config.php#Debug">WP_DEBUG</a>)</li>
<li>A small styling fix</li>
</ul>
<p><a href="http://downloads.wordpress.org/plugin/plugin-notes.1.1.zip">Enjoy</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/10/plugin-update-plugin-notes-v1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Plugin Update: Zen v1.1</title>
		<link>http://digitalize.ca/2010/10/plugin-update-zen-v1-1/</link>
		<comments>http://digitalize.ca/2010/10/plugin-update-zen-v1-1/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 19:00:56 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[distraction-free]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[update]]></category>
		<category><![CDATA[zen]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=1239</guid>
		<description><![CDATA[I pushed up v1.1 of Zen yesterday. Not much changed in this new version. Key improvement is that the content textarea is now a bit bigger so things don&#8217;t look really disproportionate on larger resolutions. I&#8217;ve also added 3 new themes: Enjoy!]]></description>
			<content:encoded><![CDATA[<p>I pushed up v1.1 of <a href="http://wordpress.org/extend/plugins/zen/">Zen</a> yesterday. Not much changed in this new version. Key improvement is that the content textarea is now a bit bigger so things don&#8217;t look really disproportionate on larger resolutions.</p>
<p>I&#8217;ve also added 3 new themes:</p>
<div id="attachment_1244" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/zen-sea-and-sky.jpg"><img src="http://digitalize.ca/media/zen-sea-and-sky-300x180.jpg" alt="Zen Sea &amp; Sky" title="Zen Sea &amp; Sky" width="300" height="180" class="size-medium wp-image-1244" /></a><p class="wp-caption-text">Zen Sea &#038; Sky</p></div>
<div id="attachment_1245" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/zen-sunset.jpg"><img src="http://digitalize.ca/media/zen-sunset-300x180.jpg" alt="Zen Sunset" title="Zen Sunset" width="300" height="180" class="size-medium wp-image-1245" /></a><p class="wp-caption-text">Zen Sunset</p></div>
<div id="attachment_1241" class="wp-caption aligncenter" style="width: 310px"><a href="http://digitalize.ca/media/zen-foiled-again.jpg"><img src="http://digitalize.ca/media/zen-foiled-again-300x180.jpg" alt="Zen Foiled Again" title="Zen Foiled Again" width="300" height="180" class="size-medium wp-image-1241" /></a><p class="wp-caption-text">Zen Foiled Again (My new favourite)</p></div>
<p><a href="http://downloads.wordpress.org/plugin/zen.zip">Enjoy</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/10/plugin-update-zen-v1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Tip: Hooking into Widget Save Callback</title>
		<link>http://digitalize.ca/2010/09/wordpress-tip-hooking-into-widget-save-callback/</link>
		<comments>http://digitalize.ca/2010/09/wordpress-tip-hooking-into-widget-save-callback/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 01:23:48 +0000</pubDate>
		<dc:creator>Mohammad Jangda</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[callbacks]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://digitalize.ca/?p=694</guid>
		<description><![CDATA[John Gadbois turned some code I gave him into short and useful write-up on how to hook into AJAX calls triggered when saving widgets. It makes use of jQuery&#8217;s Global AJAX event handlers, which allow for some very cool things, especially when you&#8217;re working with external libraries that use the jQuery AJAX methods. A future [...]]]></description>
			<content:encoded><![CDATA[<p>John Gadbois turned some code I gave him into <a href="http://www.johngadbois.com/adding-your-own-callbacks-to-wordpress-ajax-requests/">short and useful write-up</a> on how to hook into AJAX calls triggered when saving widgets. It makes use of jQuery&#8217;s <a href="http://api.jquery.com/category/ajax/global-ajax-event-handlers/">Global AJAX event handlers</a>, which allow for some very cool things, especially when you&#8217;re working with external libraries that use the jQuery AJAX methods. A future blog post will cover how plugins can use the ajaxSend event to hook into WordPress&#8217; autosave.</p>
]]></content:encoded>
			<wfw:commentRss>http://digitalize.ca/2010/09/wordpress-tip-hooking-into-widget-save-callback/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

