<?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>Rachel Carden</title>
	<atom:link href="http://rachelcarden.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://rachelcarden.com</link>
	<description>Wordpress Junkie. Web Developer. Programmer. Puzzle Solver.</description>
	<lastBuildDate>Wed, 27 Feb 2013 14:11:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>CPT-onomies Update: Version 1.2.1</title>
		<link>http://rachelcarden.com/2013/02/cpt-onomies-update-version-1-2-1/</link>
		<comments>http://rachelcarden.com/2013/02/cpt-onomies-update-version-1-2-1/#comments</comments>
		<pubDate>Tue, 05 Feb 2013 21:16:57 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[CPT-onomies]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=634</guid>
		<description><![CDATA[Download CPT-onomies CPT-onomies Screenshots CPT-onomies Documentation A new version of CPT-onomies has joined the ranks but don&#8217;t get too excited. It&#8217;s just a few bug fixes that have been brought to my attention since I released 1.2 back in December. &#8230; <a href="http://rachelcarden.com/2013/02/cpt-onomies-update-version-1-2-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p class="button1"><a href="http://wordpress.org/extend/plugins/cpt-onomies/" title="Download CPT-onomies">Download CPT-onomies</a></p>
<p class="button2"><a href="http://rachelcarden.com/cpt-onomies/screenshots/" title="CPT-onomies Screenshots">CPT-onomies Screenshots</a></p>
<p class="button2"><a href="http://rachelcarden.com/cpt-onomies/documentation/" title="CPT-onomies Documentation">CPT-onomies Documentation</a></p>
<p><a href="http://wordpress.org/extend/plugins/cpt-onomies/">A new version of CPT-onomies</a> has joined the ranks but don&#8217;t get too excited. It&#8217;s just a few bug fixes that have been brought to my attention since I released 1.2 back in December.</p>
<p>I hope you&#8217;re enjoying CPT-onomies and, as always, please let me know if you find any bugs, or have any feature requests, by <a href="http://wordpress.org/support/plugin/cpt-onomies">posting to the CPT-onomies support forum</a>.</p>
<p>Thanks for being such awesome users!</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2013/02/cpt-onomies-update-version-1-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPT-onomies Update: Version 1.2</title>
		<link>http://rachelcarden.com/2012/12/cpt-onomies-update-version-1-2/</link>
		<comments>http://rachelcarden.com/2012/12/cpt-onomies-update-version-1-2/#comments</comments>
		<pubDate>Wed, 12 Dec 2012 21:40:01 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[CPT-onomies]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[assigning terms]]></category>
		<category><![CDATA[custom post types]]></category>
		<category><![CDATA[excluding terms]]></category>
		<category><![CDATA[filters]]></category>
		<category><![CDATA[term description]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=595</guid>
		<description><![CDATA[Download CPT-onomies CPT-onomies Screenshots CPT-onomies Documentation To say my life has been crazy the past 6 months would be a very large understatement but CPT-onomies 1.2 is finally here! On top of a few minor bug fixes, here&#8217;s what 1.2 &#8230; <a href="http://rachelcarden.com/2012/12/cpt-onomies-update-version-1-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p class="button1"><a title="Download CPT-onomies" href="http://wordpress.org/extend/plugins/cpt-onomies/">Download CPT-onomies</a></p>
<p class="button2"><a title="CPT-onomies Screenshots" href="http://rachelcarden.com/cpt-onomies/screenshots/">CPT-onomies Screenshots</a></p>
<p class="button2"><a title="CPT-onomies Documentation" href="http://rachelcarden.com/cpt-onomies/documentation/">CPT-onomies Documentation</a></p>
<p>To say my life has been crazy the past 6 months would be a very large understatement but <a href="http://wordpress.org/extend/plugins/cpt-onomies/">CPT-onomies 1.2</a> is finally here! On top of a few minor bug fixes, here&#8217;s what 1.2 brings to the table:</p>
<ul>
<li><a href="http://rachelcarden.com/cpt-onomies/documentation/custom-archive-pages/">Create custom CPT-onomy archive pages</a> with just a few simple lines of code!</li>
<li>Added the ability to set a CPT-onomy term description using &#8216;term_description&#8217; or &#8216;{$taxonomy}_description&#8217; filter&#8217;.</li>
<li>Non-public custom post types can now be used as CPT-onomies.</li>
<li><a href="http://rachelcarden.com/cpt-onomies/documentation/excluding-terms/">Exclude CPT-onomy terms</a> from being listed in the &#8220;Assigning CPT-onomy Terms&#8221; admin meta box and, therefore, from being assigned to a post.</li>
<li><a href="http://rachelcarden.com/cpt-onomies/documentation/filters/">Added numerous filters</a>, allowing you to:
<ul>
<li>Remove &#8220;Assigning CPT-onomy Terms&#8221; meta boxes from admin</li>
<li>Remove CPT-onomy dropdown filters from admin</li>
<li>Remove the CPT-onomy column and/or it&#8217;s sortability</li>
<li>Customize settings by removing options and setting default property values</li>
</ul>
</li>
<li>I changed the cpt_onomy.php filename to cpt-onomy.php to match cpt-onomies.php (I&#8217;m not really sure why I gave it an underscore to begin with).</li>
<li>I, like many others, fixed the $wpdb-&gt;prepare() issue.</li>
<li><strong>If you use the following CPT-onomy settings, be sure to re-save your settings to fix potential bugs:</strong>
<ul>
<li><strong>Capability Type</strong></li>
<li><strong>Capabilities -&gt; Read Private Posts</strong></li>
</ul>
</li>
</ul>
<p>I hope you enjoy the update! And, like always, <a href="http://rachelcarden.com/contact/">please let me know</a> if you find any bugs. If you need me anytime soon, I&#8217;ll be the one <a href="http://scotchisforshippers.com/">drinking some damn scotch</a>. Until next time, keep up the awesomeness!</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/12/cpt-onomies-update-version-1-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPT-onomies Update: Version 1.1</title>
		<link>http://rachelcarden.com/2012/06/cpt-onomies-update-version-1-1/</link>
		<comments>http://rachelcarden.com/2012/06/cpt-onomies-update-version-1-1/#comments</comments>
		<pubDate>Wed, 13 Jun 2012 14:25:41 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[CPT-onomies]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[archive]]></category>
		<category><![CDATA[custom post types]]></category>
		<category><![CDATA[edit post]]></category>
		<category><![CDATA[internationalization]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[slug]]></category>
		<category><![CDATA[tag cloud]]></category>
		<category><![CDATA[taxonomies]]></category>
		<category><![CDATA[terms]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=526</guid>
		<description><![CDATA[Download CPT-onomies CPT-onomies Screenshots CPT-onomies Documentation It took me long enough but the next version of CPT-onomies has finally shipped out! And, with it, some pretty cool new features: Programmatically register your CPT-onomies Much kudos and thanks to Travis Smith &#8230; <a href="http://rachelcarden.com/2012/06/cpt-onomies-update-version-1-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://wordpress.org/extend/plugins/cpt-onomies/"><img class="aligncenter size-full wp-image-538" title="CPT-onomies Screenshot 4 (cropped)" src="http://rachelcarden.com/wp-content/uploads/2012/06/screenshot-4-cropped-e1339520528271.png" alt="" width="1115" height="590" /></a></p>
<p class="button1"><a title="Download CPT-onomies" href="http://wordpress.org/extend/plugins/cpt-onomies/">Download CPT-onomies</a></p>
<p class="button2"><a title="CPT-onomies Screenshots" href="http://rachelcarden.com/cpt-onomies/screenshots/">CPT-onomies Screenshots</a></p>
<p class="button2"><a title="CPT-onomies Documentation" href="http://rachelcarden.com/cpt-onomies/documentation/">CPT-onomies Documentation</a></p>
<p>It took me long enough but the next version of CPT-onomies has finally shipped out! And, with it, some pretty cool new features:</p>
<ul>
<li><a title="register_cpt_onomy()" href="http://rachelcarden.com/cpt-onomies/documentation/register_cpt_onomy/">Programmatically register</a> your CPT-onomies
<ul>
<li>Much kudos and thanks to <a title="Travis Smith" href="http://wpsmith.net/">Travis Smith</a> for the assist with this one!</li>
</ul>
</li>
<li>When <a title="Assigning CPT-onomy Terms" href="http://rachelcarden.com/cpt-onomies/documentation/assigning-terms/">assigning CPT-onomy terms</a> on the &#8220;edit post&#8221; page, choose from three different formats:
<ul>
<li>a checklist (same ole, same ole),</li>
<li>an autocomplete box (a pretty cool one, I might add),</li>
<li>and a select dropdown (for when you only want to select one term)</li>
</ul>
</li>
<li>Customize the CPT-onomy archive page slug
<ul>
<li>Before, you were pretty much stuck with &#8220;{post type}/tax/{term slug}&#8221; (which is still the default) but now, via the settings panel, you can use your own keywords with a little help from the variables $post_type, $term_slug and $term_id. <em>Don&#8217;t forget to flush/reset your rewrite rules once you&#8217;re finished!</em></li>
</ul>
</li>
<li>Tell the CPT-onomy tag cloud widget whether you want the terms to link to their archive page or to their custom post type post page</li>
<li>When you&#8217;re using <a title="wp_get_object_terms()" href="http://rachelcarden.com/cpt-onomies/documentation/wp_get_object_terms/">wp_get_object_terms()</a> to request term information, you can now specify term ids to exclude from your results</li>
<li>The CPT-onomy class has a new function! Introducing <a title="get_term_ancestors()" href="http://rachelcarden.com/cpt-onomies/documentation/get_term_ancestors/">get_term_ancestors()</a>. I think it&#8217;s a little self-explanatory =)</li>
<li>CPT-onomies now supports Internationalization (can&#8217;t believe it took me so long!)</li>
<li>I also tweaked the UI and fixed a few bugs</li>
</ul>
<p>I hope everyone enjoys the update as much as I do. Sorry it took me so long. My life has been a little crazy but I&#8217;m glad to be on the other side of the hiatus!</p>
<p><a title="Contact Me" href="http://rachelcarden.com/contact/">Please let me know</a> if you have any questions or find any bugs! Thanks for being such awesome users!!</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/06/cpt-onomies-update-version-1-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>How to Define Reserve Slugs for WordPress Posts and Pages</title>
		<link>http://rachelcarden.com/2012/03/how-to-define-reserve-slugs-for-wordpress-posts-and-pages/</link>
		<comments>http://rachelcarden.com/2012/03/how-to-define-reserve-slugs-for-wordpress-posts-and-pages/#comments</comments>
		<pubDate>Sat, 10 Mar 2012 23:29:31 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[custom post types]]></category>
		<category><![CDATA[filters]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=499</guid>
		<description><![CDATA[This post was inspired by an answer I posted in the WordPress Stack Exchange. This is an interesting WordPress problem that could span several scenarios. But let&#8217;s say you have a custom post type named &#8216;songs&#8217; and you defined its &#8230; <a href="http://rachelcarden.com/2012/03/how-to-define-reserve-slugs-for-wordpress-posts-and-pages/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><em>This post was inspired by an answer I posted in the <a title="WordPress - Stack Exchange" href="http://wordpress.stackexchange.com/questions/31512/custom-post-type-slug-page-slug-conflict-prevent-use-of-reserved-slug-on-pag/" target="_blank">WordPress Stack Exchange</a>.</em></p>
<p>This is an interesting WordPress problem that could span several scenarios. But let&#8217;s say you have a custom post type named &#8216;songs&#8217; and you defined its slug as &#8216;songs&#8217; so its archive page URL is <em>http://www.mysite.com/songs</em>.</p>
<p>This is fine and all but a slug used for a custom post type archive page, i.e. &#8216;songs&#8217;, is not saved in the database and is, therefore, not available when you&#8217;re creating/editing posts to tell WordPress &#8220;NO! The slug &#8216;songs&#8217; is taken!&#8221;. With that said, a user could come along and create a post (or page) with the slug &#8216;songs&#8217; which would therefore have the same URL as your custom post type archive page: <em>http://www.mysite.com/songs</em>.</p>
<p><strong>So how do you keep users on your site from creating posts with particular slugs, a.k.a. <a title="Reserved words" href="http://en.wikipedia.org/wiki/Reserved_word" target="_blank">reserve</a> slugs?</strong></p>
<p>It&#8217;s pretty simple, actually. Use one, or both, of the following two filters. They hook into WordPress when it&#8217;s checking a post&#8217;s slug, allowing you to return &#8220;true&#8221; which tells WordPress that the post slug is bad. If you return &#8220;true&#8221;, WordPress adds on a suffix, just like it would do if you were trying to use a slug that is already taken.</p>
<p>The first filter, <em>&#8216;wp_unique_post_slug_is_bad_hierarchical_slug&#8217;</em>, is for hierarchical posts and the second filter, <em>&#8216;wp_unique_post_slug_is_bad_flat_slug&#8217;</em>, is for non-hierarchical posts. While both filters provide the post&#8217;s <code>$slug</code> and <code>$post_type</code>, the hierarchical filter also provides the ID for the post parent so if the <code>$post_parent</code> is 0, you know this is a &#8220;base&#8221; post.</p>
<pre>
add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'rachel_carden_is_bad_hierarchical_slug', 10, 4 );
function rachel_carden_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
   // This post has no parent and is a "base" post
   if ( !$post_parent &amp;&amp; $slug == 'songs' )
      return true;
   return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'rachel_carden_is_bad_flat_slug', 10, 3 );
function rachel_carden_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
   if ( $slug == 'songs' )
      return true;
   return $is_bad_flat_slug;
}
</pre>
<p><em>These filters can be found in the WordPress function wp_unique_post_slug() in the wp-includes/post.php file.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/03/how-to-define-reserve-slugs-for-wordpress-posts-and-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manage WordPress Posts Using Bulk Edit and Quick Edit</title>
		<link>http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/</link>
		<comments>http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 20:13:44 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[bulk edit]]></category>
		<category><![CDATA[custom columns]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[post meta]]></category>
		<category><![CDATA[quick edit]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=416</guid>
		<description><![CDATA[Add your custom columns Populate your custom columns Add to the &#8220;Bulk Edit&#8221; and/or &#8220;Quick Edit&#8221; Row Populate Your &#8220;Quick Edit&#8221; Data Save Your &#8220;Quick Edit&#8221; Data Save Your &#8220;Bulk Edit&#8221; Data Download the Code While &#8220;Quick Edit&#8221; and &#8220;Bulk &#8230; <a href="http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<ol class="right">
<li><a href="#add_custom_columns">Add your custom columns</a></li>
<li><a href="#populate_custom_columns">Populate your custom columns</a></li>
<li><a href="#add_to_bulk_quick_edit">Add to the &#8220;Bulk Edit&#8221; and/or &#8220;Quick Edit&#8221; Row</a></li>
<li><a href="#populate_quick_edit">Populate Your &#8220;Quick Edit&#8221; Data</a></li>
<li><a href="#save_quick_edit">Save Your &#8220;Quick Edit&#8221; Data</a></li>
<li><a href="#save_bulk_edit">Save Your &#8220;Bulk Edit&#8221; Data</a></li>
<li><a href="#download_code">Download the Code</a></li>
</ol>
<p>While &#8220;Quick Edit&#8221; and &#8220;Bulk Edit&#8221; are not widely used, and are kind of hidden, features, they are no less powerful and time-saving. So when a user requested they be added to <a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://rachelcarden.com/cpt-onomies/" target="_blank">CPT-onomies</a>, I got busy learning all I could.</p>
<p>At first glance, it may seem like a lot of work but I&#8217;m just trying to cover all the details. If &#8220;Quick Edit&#8221; and &#8220;Bulk Edit&#8221; is what you&#8217;re after, then you&#8217;ll be glad you stuck around &#8217;til the end.</p>
<p>If you&#8217;re familiar with my <a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://rachelcarden.com/cpt-onomies/" target="_blank">CPT-onomies</a> plugin, you know that I use a Movies database in all of my examples. So for this tutorial, I will be adding a field for &#8220;Release Date&#8221;, which is post meta for my custom post type &#8220;Movies&#8221;, under &#8220;Bulk Edit&#8221; and &#8220;Quick Edit&#8221;.</p>
<h3 id="add_custom_columns">1) Add your custom columns</h3>
<p><a href="http://rachelcarden.com/wp-content/uploads/2012/03/add_custom_column.png"><img class="aligncenter size-full wp-image-481" title="Add Custom Column" src="http://rachelcarden.com/wp-content/uploads/2012/03/add_custom_column.png" alt="" width="1200" height="800" /></a>Since the &#8220;Bulk Edit&#8221; and &#8220;Quick Edit&#8221; hooks are triggered by custom columns, you must first add custom columns for the fields you wish to add, which are setup by &#8216;filtering&#8217; the column information.</p>
<p><strong>There are 3 different column filters:</strong> <em>&#8216;manage_pages_columns&#8217;</em> for pages, <em>&#8216;manage_posts_columns&#8217;</em> which covers ALL post types (including custom post types), and <em>&#8216;manage_{$post_type_name}_posts_columns&#8217;</em> which only covers, you guessed it, the columns for the defined $post_type_name.</p>
<p>The <em>&#8216;manage_pages_columns&#8217;</em> and <em>&#8216;manage_{$post_type_name}_posts_columns&#8217;</em> filters only pass $columns (an array), which is the column info, as an argument, but <em>&#8216;manage_posts_columns&#8217;</em> passes $columns and $post_type (a string).</p>
<p><em><strong>Note:</strong> Don&#8217;t forget that it&#8217;s a <a title="WordPress Filter Reference" href="http://codex.wordpress.org/Plugin_API/Filter_Reference" target="_blank">WordPress filter</a> so you <strong>HAVE</strong> to return the first argument that&#8217;s passed to the function, in this case $columns. And for filters that pass more than 1 argument, you have to specify the number of accepted arguments in your <a href="http://codex.wordpress.org/Function_Reference/add_filter" target="_blank">add_filter()</a> declaration, following the priority argument.</em></p>
<p>The first example adds our new column at the end. Notice that we&#8217;re specifying a post type because our function covers ALL post types:</p>
<pre>add_filter( 'manage_posts_columns', 'rachel_carden_managing_my_posts_columns', 10, 2 );
function rachel_carden_managing_my_posts_columns( $columns, $post_type ) {
   if ( $post_type == 'movies' )
      $columns[ 'release_date' ] = 'Release Date';
   return $columns;
}</pre>
<p>The second example adds our new column after the &#8220;Title&#8221; column:</p>
<pre>add_filter( 'manage_posts_columns', 'rachel_carden_managing_my_posts_columns', 10, 2 );
function rachel_carden_managing_my_posts_columns( $columns, $post_type ) {
   switch ( $post_type ) {
      case 'movies':
         $new_columns = array();
         foreach( $columns as $key =&gt; $value ) {
            $new_columns[ $key ] = $value;
            if ( $key == 'title' )
               $new_columns[ 'release_date' ] = 'Release Date';
         }
         return $new_columns;
   }
   return $columns;
}</pre>
<h3 id="populate_custom_columns">2) Populate your custom columns</h3>
<p>Now that we have a column, we need to fill our column with data. The filters to populate your custom column are pretty similar to the ones that added your column: <em>&#8216;manage_pages_custom_column&#8217;</em>, <em>&#8216;manage_posts_custom_column&#8217;</em>, and <em>&#8216;manage_{$post_type_name}_posts_custom_column</em>&#8216;. All three pass the same 2 arguments: $column_name (a string) and the $post_id (an integer).</p>
<p>Our custom column data is post meta so it will be a pretty simple case of <a href="http://codex.wordpress.org/Function_Reference/get_post_meta" target="_blank">retrieving the post meta</a> with the meta key &#8216;release_date&#8217;.</p>
<p><em>Note that we are wrapping our post meta in a div with an id of &#8220;release_date-&#8221; plus the post id. This will come in handy when we are populating our &#8220;Quick Edit&#8221; row.</em></p>
<pre>add_action( 'manage_posts_custom_column', 'rachel_carden_populating_my_posts_columns', 10, 2 );
function rachel_carden_populating_my_posts_columns( $column_name, $post_id ) {
   switch( $column_name ) {
      case 'release_date':
         echo '&lt;div id="release_date-' . $post_id . '"&gt;' . get_post_meta( $post_id, 'release_date', true ) . '&lt;/div&gt;';
         break;
   }
}</pre>
<h3 id="add_to_bulk_quick_edit">3) Add to the &#8220;Bulk Edit&#8221; and/or &#8220;Quick Edit&#8221; Row</h3>
<p><a href="http://rachelcarden.com/wp-content/uploads/2012/03/add_to_quick_edit.png"><img class="aligncenter size-full wp-image-485" title="Add To Quick Edit" src="http://rachelcarden.com/wp-content/uploads/2012/03/add_to_quick_edit.png" alt="" width="1246" height="800" /></a>Now that you have your custom column, it&#8217;s bulk/quick edit showtime! The filters are <em>&#8216;bulk_edit_custom_box&#8217;</em> and <em>&#8216;quick_edit_custom_box&#8217;</em>. Both filters pass the same 2 arguments: the $column_name (a string) and the $post_type (a string).</p>
<p>Your data&#8217;s form fields will obviously vary so customize at will. For this example, we&#8217;re using an input. Also take note of the css classes on the &lt;fieldset&gt; and &lt;div&gt;. There are a few other options like &#8216;inline-edit-col-left&#8217; and &#8216;inline-edit-col-center&#8217; for the fieldset and &#8216;inline-edit-col&#8217; for the div.</p>
<pre>add_action( 'bulk_edit_custom_box', 'rachel_carden_add_to_bulk_quick_edit_custom_box', 10, 2 );
add_action( 'quick_edit_custom_box', 'rachel_carden_add_to_bulk_quick_edit_custom_box', 10, 2 );
function rachel_carden_add_to_bulk_quick_edit_custom_box( $column_name, $post_type ) {
   switch ( $post_type ) {
      case 'movies':

         switch( $column_name ) {
            case 'release_date':
               ?&gt;&lt;fieldset class="inline-edit-col-right"&gt;
                  &lt;div class="inline-edit-group"&gt;
                     &lt;label&gt;
                        &lt;span class="title"&gt;Release Date&lt;/span&gt;
                        &lt;input type="text" name="release_date" value="" /&gt;
                     &lt;/label&gt;
                  &lt;/div&gt;
               &lt;/fieldset&gt;&lt;?php
               break;
         }
         break;

   }
}</pre>
<h3 id="populate_quick_edit">4) Populate Your &#8220;Quick Edit&#8221; Data</h3>
<p>When you click &#8220;Quick Edit&#8221;, you may have noticed that your form fields are not populated. WordPress adds one &#8220;Quick Edit&#8221; row which moves around for each post so the information cannot be pre-populated. It has to be populated with JavaScript on a per-post &#8220;click Quick Edit&#8221; basis.</p>
<p>WordPress has an inline edit post function that populates all of their default quick edit fields so we want to hook into this function, in a sense, to make sure our JavaScript code is run when needed. We will &#8220;copy&#8221; the WP function, &#8220;overwrite&#8221; the WP function so we&#8217;re hooked in, &#8220;call&#8221; the original WP function (via our copy) so WordPress is not left hanging, and then run our code.</p>
<p><em>Remember where we wrapped our column data in a &lt;div&gt; in Step 2? This is where it comes in handy, allowing our Javascript to retrieve the data by the &lt;div&gt;&#8217;s element ID to populate our form field. There are other methods to retrieve your data that involve AJAX but this route is the simplest.</em></p>
<p>Don&#8217;t forget to enqueue your script and make sure it&#8217;s dependent on WordPress&#8217;s &#8216;inline-edit-post&#8217; file. Since we&#8217;ll be using the jQuery library, we need to make sure &#8216;jquery&#8217; is loaded as well:</p>
<pre>add_action( 'admin_print_scripts-edit.php', 'rachel_carden_enqueue_edit_scripts' );
function rachel_carden_enqueue_edit_scripts() {
   wp_enqueue_script( 'rachel-carden-admin-edit', get_bloginfo( 'stylesheet_directory' ) . '/quick_edit.js', array( 'jquery', 'inline-edit-post' ), '', true );
}</pre>
<p>Now let&#8217;s create our JavaScript file:</p>
<pre>(function($) {

   // we create a copy of the WP inline edit post function
   var $wp_inline_edit = inlineEditPost.edit;
   // and then we overwrite the function with our own code
   inlineEditPost.edit = function( id ) {

      // "call" the original WP edit function
      // we don't want to leave WordPress hanging
      $wp_inline_edit.apply( this, arguments );

      // now we take care of our business

      // get the post ID
      var $post_id = 0;
      if ( typeof( id ) == 'object' )
         $post_id = parseInt( this.getId( id ) );

      if ( $post_id &gt; 0 ) {

         // define the edit row
         var $edit_row = $( '#edit-' + $post_id );

         // get the release date
	 var $release_date = $( '#release_date-' + $post_id ).text();

	 // populate the release date
	 $edit_row.find( 'input[name="release_date"]' ).val( $release_date );

      }

   };

})(jQuery);</pre>
<h3 id="save_quick_edit">5) Save Your &#8220;Quick Edit&#8221; Data</h3>
<p>Saving your &#8220;Quick Edit&#8221; data is exactly like saving custom data when editing a post, using the &#8216;save_post&#8217; hook. With that said, you may have already set this up. If you&#8217;re not sure, and your &#8220;Quick Edit&#8221; data is not saving, odds are you need to hook into the &#8216;save_post&#8217; action.</p>
<p>The &#8216;save_post&#8217; action passes 2 arguments: the $post_id (an integer) and the $post information (an object).</p>
<pre>add_action( 'save_post','rachel_carden_save_post', 10, 2 );
function rachel_carden_save_post( $post_id, $post ) {

   // don't save for autosave
   if ( defined( 'DOING_AUTOSAVE' ) &amp;&amp; DOING_AUTOSAVE )
      return $post_id;

   // dont save for revisions
   if ( isset( $post-&gt;post_type ) &amp;&amp; $post-&gt;post_type == 'revision' )
      return $post_id;

   switch( $post-&gt;post_type ) {

      case 'movies':

         // release date
	 // Because this action is run in several places, checking for the array key keeps WordPress from editing
         // data that wasn't in the form, i.e. if you had this post meta on your "Quick Edit" but didn't have it
         // on the "Edit Post" screen.
	 if ( array_key_exists( 'release_date', $_POST ) )
	    update_post_meta( $post_id, 'release_date', $_POST[ 'release_date' ] );

	 break;

   }

}</pre>
<h3 id="save_bulk_edit">6) Save Your &#8220;Bulk Edit&#8221; Data</h3>
<p>Saving the &#8220;Bulk Edit&#8221; data is a little trickier because we have to get JavaScript involved. WordPress saves their bulk edit data via <a title="WordPress AJAX" href="http://codex.wordpress.org/AJAX" target="_blank">AJAX</a> so, guess what, so do we.</p>
<p>Add the following code to your JavaScript file:</p>
<pre>$( '#bulk_edit' ).live( 'click', function() {

   // define the bulk edit row
   var $bulk_row = $( '#bulk-edit' );

   // get the selected post ids that are being edited
   var $post_ids = new Array();
   $bulk_row.find( '#bulk-titles' ).children().each( function() {
      $post_ids.push( $( this ).attr( 'id' ).replace( /^(ttle)/i, '' ) );
   });

   // get the release date
   var $release_date = $bulk_row.find( 'input[name="release_date"]' ).val();

   // save the data
   $.ajax({
      url: ajaxurl, // this is a variable that WordPress has already defined for us
      type: 'POST',
      async: false,
      cache: false,
      data: {
         action: 'rachel_carden_save_bulk_edit', // this is the name of our WP AJAX function that we'll set up next
         post_ids: $post_ids, // and these are the 2 parameters we're passing to our function
	 release_date: $release_date
      }
   });

});</pre>
<p>Now we need to setup the WordPress AJAX function that will handle and save our data:</p>
<pre>add_action( 'wp_ajax_rachel_carden_save_bulk_edit', 'rachel_carden_save_bulk_edit' );
function rachel_carden_save_bulk_edit() {
   // get our variables
   $post_ids = ( isset( $_POST[ 'post_ids' ] ) &amp;&amp; !empty( $_POST[ 'post_ids' ] ) ) ? $_POST[ 'post_ids' ] : array();
   $release_date = ( isset( $_POST[ 'release_date' ] ) &amp;&amp; !empty( $_POST[ 'release_date' ] ) ) ? $_POST[ 'release_date' ] : NULL;
   // if everything is in order
   if ( !empty( $post_ids ) &amp;&amp; is_array( $post_ids ) &amp;&amp; !empty( $release_date ) ) {
      foreach( $post_ids as $post_id ) {
         update_post_meta( $post_id, 'release_date', $release_date );
      }
   }
}</pre>
<h3 id="download_code">7) Download the Code</h3>
<p>See? That wasn&#8217;t too bad. <a href="http://www.rachelcarden.com/downloads/manage_wordpress_posts_using_bulk_edit_and_quick_edit.zip">I&#8217;ll even give you the code all nice and neat.</a> Go nuts, buddy.</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/03/manage-wordpress-posts-using-bulk-edit-and-quick-edit/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>CPT-onomies Documentation is Up and Running</title>
		<link>http://rachelcarden.com/2012/02/cpt-onomies-documentation-is-up-and-running/</link>
		<comments>http://rachelcarden.com/2012/02/cpt-onomies-documentation-is-up-and-running/#comments</comments>
		<pubDate>Tue, 07 Feb 2012 22:15:12 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[CPT-onomies]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[custom post types]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[taxonomies]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=362</guid>
		<description><![CDATA[Download CPT-onomies CPT-onomies Screenshots CPT-onomies Documentation CPT-onomies is a WordPress plugin that allows you to create, and use, taxonomies powered by your custom post types, using the post titles as the taxonomy terms. The best part about CPT-onomies is that &#8230; <a href="http://rachelcarden.com/2012/02/cpt-onomies-documentation-is-up-and-running/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p class="button1"><a href="http://wordpress.org/extend/plugins/cpt-onomies/" title="Download CPT-onomies">Download CPT-onomies</a></p>
<p class="button2"><a title="CPT-onomies Screenshots" href="http://rachelcarden.com/cpt-onomies/screenshots/">CPT-onomies Screenshots</a></p>
<p class="button2"><a title="CPT-onomies Documentation" href="http://rachelcarden.com/cpt-onomies/documentation/">CPT-onomies Documentation</a></p>
<p><a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://rachelcarden.com/cpt-onomies/">CPT-onomies</a> is a WordPress plugin that allows you to create, and use, taxonomies powered by your custom post types, using the post titles as the taxonomy terms. The best part about CPT-onomies is that they work just like regular taxonomies and therefore use the same functions!</p>
<p>Unfortunately, not every taxonomy function works <em>right now</em> but don&#8217;t worry, I&#8217;ve created CPT-onomy functions to help bridge the gap between WordPress and the plugin. The CPT-onomy functions even mirror the WordPress functions, using the same parameters and return values.</p>
<p><a title="CPT-onomies Documentation" href="http://rachelcarden.com/cpt-onomies/documentation/">Use the CPT-onomies Documentation</a> to see which WordPress taxonomy functions work and when you&#8217;ll need to use a CPT-onomy function. The documentation also includes function parameters, return values, examples, and other helpful information.</p>
<p>If you notice a mistake, or have a function request, feel free to leave a comment or <a title="Contact Me" href="http://rachelcarden.com/contact/">contact me</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/02/cpt-onomies-documentation-is-up-and-running/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CPT-onomies: Using Custom Post Types as Taxonomies</title>
		<link>http://rachelcarden.com/2012/02/cpt-onomies-using-custom-post-types-as-taxonomies/</link>
		<comments>http://rachelcarden.com/2012/02/cpt-onomies-using-custom-post-types-as-taxonomies/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 16:58:56 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[CPT-onomies]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[custom post types]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[taxonomies]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=1</guid>
		<description><![CDATA[If you&#8217;ve ever used a WordPress custom post type or taxonomy, you know that they can be powerful tools for creating and organizing content. But what if I told you that you could take these features a step further and &#8230; <a href="http://rachelcarden.com/2012/02/cpt-onomies-using-custom-post-types-as-taxonomies/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://wordpress.org/extend/plugins/cpt-onomies/"><img class="aligncenter size-full wp-image-303" title="CPT-onomies Screenshot 1" src="http://rachelcarden.com/wp-content/uploads/2012/02/screenshot-1.png" alt="" width="1130" height="680" /></a>If you&#8217;ve ever used a WordPress custom post type or taxonomy, you know that they can be powerful tools for creating and organizing content. But what if I told you that you could take these features a step further and create relationships between your post types, using your post titles to assign taxonomy relationships?</p>
<p>Introducing &#8220;<a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://wordpress.org/extend/plugins/cpt-onomies/">CPT-onomies: Using Custom Post Types as Taxonomies</a>&#8220;:</p>
<h2>Humble beginnings</h2>
<p>When I was first building <a title="University of Alabama College of Engineering" href="http://eng.ua.edu">http://eng.ua.edu</a>, I knew that custom post types would play a huge role (and basically take over my life). With numerous post types, I wanted to establish a <a title="University of Alabama College of Engineering People Directory" href="http://eng.ua.edu/people/">dynamic &#8220;People&#8221; directory</a> that would connect each person to the &#8220;Departments&#8221; they worked for, the &#8220;Buildings&#8221; they worked in, the &#8220;Capstone Engineers&#8221; they were featured in (our research magazine), and any other content available.</p>
<p>In came custom taxonomies. I created taxonomies that &#8220;mirrored&#8221; each custom post type (using the post title as terms) and, voila, a dynamic and easily filtered people directory was born! But while managing the &#8220;Buildings&#8221; taxonomy was easy (buildings don&#8217;t exactly come and go on a daily basis), imagine managing a list of 200+ people and having to make sure the &#8220;People&#8221; taxonomy always matched the &#8220;People&#8221; custom post type. It&#8217;s more than just managing the titles, you have to make sure the slugs match too! Let&#8217;s just say that system didn&#8217;t last long.</p>
<h2>From Idea to Plugin</h2>
<p>While the premise of being able to use custom post types as taxonomies, and not having to duplicate information, was always the root of the project, &#8220;CPT-onomies&#8221; has taken several forms. At first, it wasn&#8217;t even a plugin, it was in my theme. When it progressed to a plugin, it was just for personal use and was very rough around the edges, using all kinds of WordPress hacks in a devil-may-care manner. <em>To give me some credit, I had only been using WordPress for a few months and was on a strict redesign schedule. &#8220;Behind the scenes&#8221; was not a high priority.</em></p>
<p>But the website launched, my WordPress skills grew, and before I knew it I was saying things like &#8220;I bet I&#8217;m not the only one who could use this setup&#8221; and &#8220;This system of using custom post types as taxonomies would make a great plugin&#8221;. Little did I know how much fun I would have over the next few weeks.</p>
<h2>Developing CPT-onomies</h2>
<p>It wasn&#8217;t until I started development that I came up with the idea to hook into WordPress core and register the custom post type taxonomies as actual taxonomies. Once this decision was made, the project grew tenfold but, boy, was it worth it. Not only did it make the plugin stronger but it kept the user from having to learn or implement new code. That, in itself, was worth every minute of development. Tack on an extensive custom post type manager, so the user can manage their custom post types within the admin, and you&#8217;ve got yourself a pretty powerful plugin. <strong>Is CPT-onomy an official WordPress term?</strong> No. It&#8217;s just a fun word I made up. =)</p>
<h2>Using CPT-onomies</h2>
<p>One of the best features of the CPT-onomies plugin is that you don&#8217;t have to create CPT-onomies to put the plugin to good use. Featuring a full-fledged interface, CPT-onomies allows you to create custom post types, and manage them, <strong>without touching one line of code!</strong> If you&#8217;re already using a plugin, or theme, that creates custom post types, don&#8217;t worry, CPT-onomies is all-inclusive. Any registered custom post type can be used as a CPT-onomy.</p>
<p><a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://rachelcarden.com/cpt-onomies/">Learn more about CPT-onomies</a> or <a title="Download CPT-onomies" href="http://wordpress.org/extend/plugins/cpt-onomies/">download CPT-onomies</a>. Refer to <a title="CPT-onomies support forums" href="http://wordpress.org/tags/cpt-onomies?forum_id=10">the plugin&#8217;s support forums</a> or my <a title="CPT-onomies: Using Custom Post Types as Taxonomies" href="http://rachelcarden.com/cpt-onomies/">CPT-onomies section</a> if you ever need any help. If you can&#8217;t find what you need, or come across any bugs, <a title="Contact Me" href="http://rachelcarden.com/contact/">please let me know</a>.</p>
<p>I hope you enjoy using CPT-onomies as much as I enjoyed bringing it to life.</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/02/cpt-onomies-using-custom-post-types-as-taxonomies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hi there</title>
		<link>http://rachelcarden.com/2012/01/hi-there/</link>
		<comments>http://rachelcarden.com/2012/01/hi-there/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 22:11:37 +0000</pubDate>
		<dc:creator>Rachel Carden</dc:creator>
				<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://rachelcarden.com/?p=188</guid>
		<description><![CDATA[My name is Rachel Carden and I&#8217;m a High Ed Web Developer from the GREAT state of Alabama who loves working with WordPress, solving puzzles, watching college football and just about anything related to Disney. But, while I may tweet &#8230; <a href="http://rachelcarden.com/2012/01/hi-there/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>My name is Rachel Carden and I&#8217;m a High Ed Web Developer from the <strong>GREAT</strong> state of Alabama who loves working with <a title="WordPress" href="http://wordpress.org/">WordPress</a>, solving puzzles, <a title="University of Alabama football" href="http://www.rolltide.com/sports/m-footbl/">watching college football</a> and just about anything related to <a title="Disney" href="http://disney.go.com/">Disney</a>.</p>
<p>But, while I may <a title="bamadesigner on Twitter" href="https://twitter.com/bamadesigner">tweet</a> about all that stuff, <a title="Rachel Carden" href="http://www.rachelcarden.com">RachelCarden.com</a> will be a place to share my work, thoughts and ideas surrounding WordPress and my love for programming, problem solving, and the World Wide Web.</p>
<p>So make yourself at home. <a title="About Me" href="http://rachelcarden.com/about/">Learn more about my background</a>, or <a title="bamadesigner on Twitter" href="https://twitter.com/bamadesigner">follow me on Twitter</a>, and take this little nugget of inspiration with you: &#8220;All our dreams can come true, if we have the courage to pursue them.&#8221; &#8211; Walt Disney</p>
]]></content:encoded>
			<wfw:commentRss>http://rachelcarden.com/2012/01/hi-there/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
