<?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>Gregory Grubbs &#187; automated</title>
	<atom:link href="http://gregorygrubbs.com/tag/automated/feed/" rel="self" type="application/rss+xml" />
	<link>http://gregorygrubbs.com</link>
	<description>Attention in software development</description>
	<lastBuildDate>Mon, 12 Jul 2010 17:35:34 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>One-button website publishing using WordPress-mu</title>
		<link>http://gregorygrubbs.com/wordpress/one-button-website-publishing-using-wordpress-mu/</link>
		<comments>http://gregorygrubbs.com/wordpress/one-button-website-publishing-using-wordpress-mu/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 00:50:48 +0000</pubDate>
		<dc:creator>Gregory Grubbs</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress-mu]]></category>
		<category><![CDATA[automated]]></category>
		<category><![CDATA[creation]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[website]]></category>

		<guid isPermaLink="false">http://gregorygrubbs.com/?p=174</guid>
		<description><![CDATA[
I&#8217;m kinda loving on WordPress MU.  One of my recent projects required building web sites that pulled from a shared database.  WordPress MU allowed me to create a one-button website builder for my client.  WordPress MU calls them blogs, but my client will map a unique domain to each blog, and, well, [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Create many from the one" href="http://flickr.com/photos/63989735@N00/2431138923"><img src="http://farm3.static.flickr.com/2299/2431138923_ff1f7aaa36.jpg" alt="" /></a></p>
<p>I&#8217;m kinda loving on WordPress MU.  One of my recent projects required building web sites that pulled from a shared database.  WordPress MU allowed me to create a one-button website builder for my client.  WordPress MU calls them blogs, but my client will map a unique domain to each blog, and, well, doesn&#8217;t use them as blogs at all.  So I&#8217;m calling them sites here.</p>
<p>By filling in three fields and clicking a button, my client creates a website that</p>
<ul>
<li> Associates metadata with the site that specifies filter criteria to select records from the shared database</li>
<li> Sets the permalink structure for the new site to a custom setting</li>
<li> Creates a key category for the new site, one that is used for the posts generated in a later step</li>
<li> Sets the theme</li>
<li> All the initial pages are created, including content.  The &#8220;slug&#8221; is set specifically to support the URL structure we want.  Page template is also set here because our design calls for a hierarchy of pages.</li>
<li> If the PageMash plugin is active (it is auto-activated for all new blogs using Plugin Commander), certain pages are hidden, and a specific order is set so that page navigation comes out looking good</li>
<li> The front page is set, because we are creating CMS sites, not blogs</li>
<li>Several hundred posts are generated out of the underlying shared non-WPMU database tables</li>
</ul>
<p>All of this takes something like 20 seconds, at which point the admin can visit the new site as a subdomain.  The theme has been applied, navigation works correctly, it is beauty.</p>
<p><span id="more-174"></span></p>
<p>Here&#8217;s how it is done in code.  All you need to do is register a function for the action hook that WordPress MU runs when a new blog is created.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> mypp_initialize_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// first, switch to the new blog; we will undo this at the</span>
  <span style="color: #666666; font-style: italic;">// end of the function with restore_current_blog()</span>
  switch_to_blog<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// add a blog option, here a filter with a default value</span>
  add_option<span style="color: #009900;">&#40;</span><span style="color: #000088;">$blog_id</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'campus_selection_criteria'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;CampusStateID='CA'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// Set a custom permalink structure</span>
  <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>set_permalink_structure<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/%category%/%postname%'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$wp_rewrite</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>flush_rules<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wp_create_category'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      wp_create_category<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'schools'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// switch theme - this one specifies a child theme</span>
  switch_theme<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'corporate'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'tweaked-corporate'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// Prepare options used by the pageMash plugin, auto-activated for new sites</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span>get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exclude_pages'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #000088;">$excludePagesList</span><span style="color: #339933;">=</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">else</span>
    <span style="color: #000088;">$excludePagesList</span> <span style="color: #339933;">=</span> get_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exclude_pages'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//if it's empty set as an empty array</span>
  <span style="color: #666666; font-style: italic;">// add pages to support the basic page structure</span>
  <span style="color: #666666; font-style: italic;">// NOTE: the full code is not shown, standard use of wp_insert post</span>
  <span style="color: #666666; font-style: italic;">// for each page:</span>
  <span style="color: #000088;">$newid</span> <span style="color: #339933;">=</span> wp_insert_post<span style="color: #009900;">&#40;</span><span style="color: #000088;">$postdata</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$newid</span> <span style="color: #339933;">&amp;</span>amp<span style="color: #339933;">;&amp;</span>amp<span style="color: #339933;">;</span> <span style="color: #339933;">!</span>is_wp_error<span style="color: #009900;">&#40;</span><span style="color: #000088;">$newid</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    add_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$newid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> IWANTOEXCLUDETHISPARTICULARPAGEFROMNAVIGATION <span style="color: #009900;">&#41;</span>
      <span style="color: #000088;">$excludePagesList</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$newid</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>THISPARTICULARPAGE <span style="color: #339933;">==</span> <span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      update_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'show_on_front'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'page'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      update_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'page_on_front'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$newid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// error handling if insert post failed</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #666666; font-style: italic;">// end for each page</span>
  update_option<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'exclude_pages'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$excludePagesList</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// now generate posts for schools from the shared database</span>
  createSchoolAsPost<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$blog_id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// we're done! restore our initial blog</span>
  restore_current_blog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// function mypp_initialize_blog</span>
&nbsp;
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'wpmu_new_blog'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mypp_initialize_blog'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://gregorygrubbs.com/wordpress/one-button-website-publishing-using-wordpress-mu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
