<?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; wpmu</title>
	<atom:link href="http://gregorygrubbs.com/tag/wpmu/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>How to get your command line PHP script working with WordPress-MU 2.7</title>
		<link>http://gregorygrubbs.com/wordpress/how-to-get-your-command-line-php-script-working-with-wordpress-mu-27/</link>
		<comments>http://gregorygrubbs.com/wordpress/how-to-get-your-command-line-php-script-working-with-wordpress-mu-27/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 16:47:23 +0000</pubDate>
		<dc:creator>Gregory Grubbs</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress-mu]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web server]]></category>
		<category><![CDATA[wpmu]]></category>

		<guid isPermaLink="false">http://gregorygrubbs.com/?p=160</guid>
		<description><![CDATA[
	OK, this one is obscure. I only post about what I can&#8217;t find on Google!
Until recently it has been possible to run command-line PHP scripts that include wp-config.php or wpmu-settings.php, in order to give those scripts access to WordPress globals like $wpdb, functions such as wp_insert_post etc.  
These scripts worked with WordPress-MU until recently [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/86639396@N00/125838823" title="To the moon, Ajax!"><img src="http://farm1.static.flickr.com/48/125838823_e1a4d43a62_m.jpg" /></a></p>
<p>	OK, this one is obscure. I only post about what I can&#8217;t find on Google!</p>
<p>Until recently it has been possible to run command-line PHP scripts that include wp-config.php or wpmu-settings.php, in order to give those scripts access to WordPress globals like $wpdb, functions such as wp_insert_post etc.  </p>
<p>These scripts worked with WordPress-MU until recently &#8212; now the scripts just exit with no output.  </p>
<p>The reason?  WPMU now initiates a redirect in the bootstrap process (search for &#8216;header( &#8220;Location: &#8220;&#8216;  in wpmu-settings.php).  A browser can follow that redirection, but a command line script cannot.  So, if you want to initiate scripts that run from the command line, you will have to get the web server involved by invoking a text browser such as curl, wget, or links.  </p>
<p>It&#8217;s best not to force your scripts to figure out where to find wp-config.php anyway.  I have taken to using a method suggested in <a href="http://wordpress.org/support/topic/190522">this thread</a>, as shown in the code sample below.  The good news is, you know that your script will work the same whether initiated from a plugin in a graphic browser, used in an Ajax call, or initiated from cron or the command line shell.</p>
<p>So instead of kicking your script off with something like</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php <span style="color: #660033;">-q</span> myscript.php</pre></div></div>

<p>You will create the script as a proper plugin and do something like</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>curl <span style="color: #660033;">-d</span> <span style="color: #007800;">mypp_cmd</span>=status http:<span style="color: #000000; font-weight: bold;">//</span>mywpmusite.com</pre></div></div>

<p>Sample plugin code used for the above example follows.  The prefix for the functions is &#8216;mypp&#8217;, which of course stands for &#8216;MY Plugin Prefix&#8217; to create a unique namespace.  The code below returns results as JSON encoded, and calls die()/exit() at the end to prevent an entire page being created.  For log files run from cron, you may choose to return plain text instead.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #009933; font-style: italic;">/**
   * Add a query var for this plugin
   * This allows Ajax programs to operate without requiring file paths
   * Instead, Ajax functions look for the query var 'mypp_cmd'
   */</span>
  <span style="color: #000000; font-weight: bold;">function</span> mypp_query_vars<span style="color: #009900;">&#40;</span><span style="color: #000088;">$qvars</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$qvars</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'mypp_cmd'</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000088;">$qvars</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// function mypp_query_vars</span>
&nbsp;
  <span style="color: #009933; font-style: italic;">/**
   * Handle AJAX requests in the template_redirect action
   * We recognize our requests from the query var 'mypp_cmd'
   * Here we allow GET requests using $_REQUEST; to restrict to POST, use $_POST instead
   */</span>
  <span style="color: #000000; font-weight: bold;">function</span> mypp_template_redirect<span style="color: #009900;">&#40;</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;">$wpdb</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$cmd</span> <span style="color: #339933;">=</span> get_query_var<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'mypp_cmd'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$response</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;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'status'</span><span style="color: #339933;">:</span>
	<span style="color: #000088;">$response</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'status'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'success'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">'message'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Sample status message'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
	<span style="color: #000088;">$response</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'status'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'success'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">'msg'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Unknown command'</span><span style="color: #339933;">,</span>
				    <span style="color: #0000ff;">'cmd'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$cmd</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// switch $cmd</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-type: text/x-json; charset=utf-8'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">print</span> <span style="color: #990000;">utf8_encode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">json_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$response</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">die</span><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;">// $cmd is set</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// function mypp_template_redirect</span>
&nbsp;
add_filter<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'query_vars'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mypp_query_vars'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
add_action<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template_redirect'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mypp_template_redirect'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://gregorygrubbs.com/wordpress/how-to-get-your-command-line-php-script-working-with-wordpress-mu-27/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to give all new WPMU blogs default properties, theme and pages</title>
		<link>http://gregorygrubbs.com/wordpress/how-to-give-wpmu-blogs-default-properties-theme-and-pages/</link>
		<comments>http://gregorygrubbs.com/wordpress/how-to-give-wpmu-blogs-default-properties-theme-and-pages/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 19:22:54 +0000</pubDate>
		<dc:creator>Gregory Grubbs</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wpmu]]></category>

		<guid isPermaLink="false">http://gregorygrubbs.com/?p=63</guid>
		<description><![CDATA[I&#8217;ve been developing an application on Wordpress-MU and thought I&#8217;d share a cool tip.
When new web sites are generated by my client, I wanted the experience to be painless; a one-button ready-to-go web site.
It turns out there is an action hook (of course there is!) when a new blog is created.  So let&#8217;s get down [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been developing an application on Wordpress-MU and thought I&#8217;d share a cool tip.</p>
<p>When new web sites are generated by my client, I wanted the experience to be painless; a one-button ready-to-go web site.</p>
<p>It turns out there is an action hook (of course there is!) when a new blog is created.  So let&#8217;s get down to the nitty gritty and see how to implement it.</p>
<p>I wanted to create a property that would apply to the new web site, which would allow my client to limit what data gets displayed on that site.  I also wanted to generate the basic set of pages that I am using to support the sites&#8217; URL structure.  Each page has a unique template that gives it some special navigation and content mojo.</p>
<p>So first I set the site-global option:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">add_blog_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 LIKE '%'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Now for the pages with their templates.  In order to let wp_insert_post know which blog to use, we use a handy function call:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">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></pre></div></div>

<p>We will also need to specify the theme we are using so that the starting theme will be selected and the templates will be correctly associated.</p>
<p>I can then create the pages as I would in Wordpress-non-MU.  The final step is to call add_action() to hook this code into the blog creation event.</p>
<p>Here is the code in its entirety</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> dscp_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>
   add_blog_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 LIKE '%'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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;">// switch theme</span>
   switch_theme<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'thematic'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'mychildtheme'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$postdata</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'post_parent'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_status'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'publish'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_title'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'DESCRIPTIVE TITLE'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_name'</span>  <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'descriptive-title'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">/* the slug */</span>
   <span style="color: #0000ff;">'page_template'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'template-whatever.php'</span><span style="color: #339933;">,</span>
   <span style="color: #0000ff;">'post_type'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'page'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</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;&amp;</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: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #666666; font-style: italic;">// your error handling code</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</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;">'dscp_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/how-to-give-wpmu-blogs-default-properties-theme-and-pages/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
