<?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>Phil Bayfield &#187; PHP</title>
	<atom:link href="http://www.philbayfield.com/category/dev/dev-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.philbayfield.com</link>
	<description>A little about me, my photos and some general geeky stuff!</description>
	<lastBuildDate>Sun, 05 Sep 2010 15:27:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>WordPress Plugin &#8211; Final tweaks</title>
		<link>http://www.philbayfield.com/2009/10/02/wordpress-plugin-final-tweaks/</link>
		<comments>http://www.philbayfield.com/2009/10/02/wordpress-plugin-final-tweaks/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 02:56:12 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.philbayfield.com/?p=105</guid>
		<description><![CDATA[The plugin is now pretty much finished, there are certainly other options that could be added such as page summaries via AJAX, custom image sizes for specific preview etc but for now the only thing that is really left to do is to add a quicktag option so that the plugin can be easily used [...]]]></description>
			<content:encoded><![CDATA[<p>The plugin is now pretty much finished, there are certainly other options that could be added such as page summaries via AJAX, custom image sizes for specific preview etc but for now the only thing that is really left to do is to add a quicktag option so that the plugin can be easily used from the post editor.</p>
<p>This is very simple to do, first I have created a hook to add a script file:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;">add_action<span class="br0">&#40;</span><span class="st_h">&#8216;admin_print_scripts&#8217;</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">&#8216;Admin_Script&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>This script is only loaded within the admin (hence the action is &#8216;admin_print_scripts&#8217;) and it tells WordPress which function to get the script definition.</p>
<p>The Admin_Script function attaches a simple Javascript file to add the quicktag:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
&nbsp;* Load admin javascipt file<br />
&nbsp;*<br />
&nbsp;* @return void<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> Admin_Script<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; wp_enqueue_script<span class="br0">&#40;</span><span class="st_h">&#8216;wp-thumbshot-preview&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; plugin_dir_url<span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st_h">&#8216;wp-thumbshot-preview.js&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st_h">&#8216;quicktags&#8217;</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st_h">&#8217;0.1&#8242;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>It&#8217;s fairly obvious what this does, worth noting that quicktags is a prerequisite (so that the quicktags Javascript functions are loaded first).</p>
<p>The Javascript file &#8216;wp-thumbshot-preview.js&#8217; contains the quicktag definition:</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace; font-size: 1.2em;">edButtons<span class="br0">&#91;</span>edButtons.<span class="me1">length</span><span class="br0">&#93;</span> <span class="sy0">=</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">new</span> edButton<span class="br0">&#40;</span><span class="st0">&#8216;preview&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#8216;preview&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#8216;[preview]&#8216;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#8216;[/preview]&#8216;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st0">&#8221;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Now in the code editor there is a &#8216;preview&#8217; button so that the plugin&#8217;s preview tags can be auto completed!</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.philbayfield.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.philbayfield.com/2009/10/02/wordpress-plugin-final-tweaks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin &#8211; Admin options page</title>
		<link>http://www.philbayfield.com/2009/10/02/wordpress-plugin-admin-options-page/</link>
		<comments>http://www.philbayfield.com/2009/10/02/wordpress-plugin-admin-options-page/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 02:29:21 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.philbayfield.com/?p=94</guid>
		<description><![CDATA[The next step following the database integration is a simple settings page to change the plugin options. This is achieved with another hook to add an item to the menu in the admin area: add_action&#40;&#8216;admin_menu&#8217;, &#160;array&#40;&#38;$this, &#8216;Admin_Menu&#8217;&#41;&#41;; This alone doesn&#8217;t do anything other than telling WordPress to call the &#8216;Admin_Menu&#8217; function at the right time, [...]]]></description>
			<content:encoded><![CDATA[<p>The next step following the database integration is a simple settings page to change the plugin options. This is achieved with another hook to add an item to the menu in the admin area:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;">add_action<span class="br0">&#40;</span><span class="st_h">&#8216;admin_menu&#8217;</span><span class="sy0">,</span> &nbsp;<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">&#8216;Admin_Menu&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>This alone doesn&#8217;t do anything other than telling WordPress to call the &#8216;Admin_Menu&#8217; function at the right time, the function then tells WordPress the menu item to add and which page to open via the add_options_page API function:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
&nbsp;* Create admin menu settings item<br />
&nbsp;*<br />
&nbsp;* @return void<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> Admin_Menu<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_options_page<span class="br0">&#40;</span><span class="st_h">&#8216;Thumbshot Preview Settings&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="st_h">&#8216;Thumbshot Preview&#8217;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;8<span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/basename"><span class="kw3">basename</span></a><span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">&#8216;Admin_Settings&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This creates the page link on the menu as &#8216;Thumbshot Preview&#8217; and informs which file (the current plugin PHP file) and which function to call &#8216;Admin_Settings&#8217;. The number 8 refers to the user level required to access the page, in this case it is only available to the WordPress admin.</p>
<p>The Admin_Settings function simply outputs some HTML and also provides some very basic form validation and obviously also does the database updates. I have copied the styles and layouts from a standard WordPress settings page to ensure my page is consistent with the default styles. Here is the completed function:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
&nbsp;* Display the admin setting page<br />
&nbsp;*<br />
&nbsp;* @return void<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> Admin_Settings<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$msg</span> <span class="sy0">=</span> <span class="kw4">null</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// If form submitted save options</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_SERVER</span><span class="br0">&#91;</span><span class="st_h">&#8216;REQUEST_METHOD&#8217;</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="st_h">&#8216;POST&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// If free mode, very loose validation as most options are not needed</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_mode&#8217;</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="st_h">&#8216;free&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Mode&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;free&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_cid&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Cid&#8217;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_cid&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_width&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Width&#8217;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_width&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_height&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Height&#8217;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_height&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$msg</span> <span class="sy0">=</span> <span class="st_h">&#8216;Settings saved.&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// For paid mode make sure the cid is numeric or do not save anything</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_mode&#8217;</span><span class="br0">&#93;</span> <span class="sy0">==</span> <span class="st_h">&#8216;paid&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_cid&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Mode&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;paid&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Cid&#8217;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_cid&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_width&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Width&#8217;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_width&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_numeric"><span class="kw3">is_numeric</span></a><span class="br0">&#40;</span><span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_height&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; update_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Height&#8217;</span><span class="sy0">,</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">&#8216;tsp_height&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$msg</span> <span class="sy0">=</span> <span class="st_h">&#8216;Settings saved.&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$msg</span> <span class="sy0">=</span> <span class="st_h">&#8216;Please enter a valid user id.&#8217;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Refresh options</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">Populate_Settings</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Display the page HTML, kinda dirty but quick!</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">echo</span> <span class="st_h">&#8216;<br />
&lt;div class=&quot;wrap&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;div id=&quot;icon-options-general&quot; class=&quot;icon32&quot;&gt;&lt;br /&gt;&lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;h2&gt;Thumbshot Preview Settings&lt;/h2&gt;&#8217;</span><span class="sy0">.</span><span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/is_null"><span class="kw3">is_null</span></a><span class="br0">&#40;</span><span class="re0">$msg</span><span class="br0">&#41;</span> ? <span class="st_h">&#8216;&lt;div style=&quot;background-color: #fffbcc;&quot; id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;&#8217;</span><span class="sy0">.</span><span class="re0">$msg</span><span class="sy0">.</span><span class="st_h">&#8216;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&#8217;</span> <span class="sy0">:</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">&#8216;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;form method=&quot;post&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;update&quot; /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;table class=&quot;form-table&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;tsp_mode&quot;&gt;Plugin mode&lt;/lable&gt;&lt;/th&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;select name=&quot;tsp_mode&quot; id=&quot;tsp_mode&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option &#8216;</span><span class="sy0">.</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mode</span> <span class="sy0">==</span> <span class="st_h">&#8216;free&#8217;</span> ? <span class="st_h">&#8216;selected=&quot;selected&quot; &#8216;</span> <span class="sy0">:</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">&#8216;value=&quot;free&quot;&gt;Free&lt;/option&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;option &#8216;</span><span class="sy0">.</span><span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mode</span> <span class="sy0">==</span> <span class="st_h">&#8216;paid&#8217;</span> ? <span class="st_h">&#8216;selected=&quot;selected&quot; &#8216;</span> <span class="sy0">:</span> <span class="kw4">null</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st_h">&#8216;value=&quot;paid&quot;&gt;Paid&lt;/option&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/select&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span class=&quot;description&quot;&gt;If you have a &lt;a href=&quot;http://www.thumbshots.com/&quot;&gt;Thumbshots.com&lt;/a&gt; account select paid otherwise use the free &lt;a href=&quot;http://www.thumbshots.org/&quot;&gt;Thumbshots.org&lt;/a&gt; service.&lt;/span&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;tsp_cid&quot;&gt;User ID&lt;/lable&gt;&lt;/th&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input name=&quot;tsp_cid&quot; id=&quot;tsp_cid&quot; type=&quot;text&quot; value=&quot;&#8217;</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">cid</span><span class="sy0">.</span><span class="st_h">&#8216;&quot; class=&quot;small-text&quot; /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span class=&quot;description&quot;&gt;Your &lt;a href=&quot;http://www.thumbshots.com/&quot;&gt;Thumbshots.com&lt;/a&gt; user id. [Paid service only]&lt;/span&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;tsp_width&quot;&gt;Default image width&lt;/lable&gt;&lt;/th&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input name=&quot;tsp_width&quot; id=&quot;tsp_width&quot; type=&quot;text&quot; value=&quot;&#8217;</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">width</span><span class="sy0">.</span><span class="st_h">&#8216;&quot; class=&quot;small-text&quot; /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span class=&quot;description&quot;&gt;The default preview image width. [Paid service only]&lt;/span&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;tr valign=&quot;top&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;th scope=&quot;row&quot;&gt;&lt;label for=&quot;tsp_height&quot;&gt;Default image height&lt;/lable&gt;&lt;/th&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input name=&quot;tsp_height&quot; id=&quot;tsp_height&quot; type=&quot;text&quot; value=&quot;&#8217;</span><span class="sy0">.</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">height</span><span class="sy0">.</span><span class="st_h">&#8216;&quot; class=&quot;small-text&quot; /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;span class=&quot;description&quot;&gt;The default preview image height. [Paid service only]&lt;/span&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/td&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/tr&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/table&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;p class=&quot;submit&quot;&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;input type=&quot;submit&quot; name=&quot;Submit&quot; class=&quot;button-primary&quot; value=&quot;Save Changes&quot; /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/p&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/form&gt;<br />
&lt;/div&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &#8216;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>The validation here isn&#8217;t perfect, but it does the job. Considering the simplicity of this plugin it doesn&#8217;t really make much sense to spend time making it any more complex than this. It would be nice to use templates for the HTML as well but again as this is a simple plugin it doesn&#8217;t really warrant the complexity.</p>
<p>Here is a screen shot of the settings page:</p>
<p><img src="http://www.philbayfield.com/wp-content/uploads/2009/10/thumbshots.jpg" alt="Thumbshots Preview Settings" title="Thumbshots Preview Settings" width="765" height="217" class="alignnone size-full wp-image-97" /></p>
<p>Note: The functions listed here are used as part of the object defined in my previous post.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.philbayfield.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.philbayfield.com/2009/10/02/wordpress-plugin-admin-options-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin &#8211; Database integration</title>
		<link>http://www.philbayfield.com/2009/10/02/wordpress-plugin-database-integration/</link>
		<comments>http://www.philbayfield.com/2009/10/02/wordpress-plugin-database-integration/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 02:08:21 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.philbayfield.com/?p=91</guid>
		<description><![CDATA[The next step with the plugin is to add some database integration so the plugin options can be stored in the WordPress database. This is really simple as the API provides funtions for this in the form of the functions add_option, get_option, update_option and delete_option. To ensure that the database is populated with some defaults, [...]]]></description>
			<content:encoded><![CDATA[<p>The next step with the plugin is to add some database integration so the plugin options can be stored in the WordPress database. This is really simple as the API provides funtions for this in the form of the functions add_option, get_option, update_option and delete_option.</p>
<p>To ensure that the database is populated with some defaults, a hook can be added to do this:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;">register_activation_hook<span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="sy0">,</span> &nbsp; <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">&#8216;Activate&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
&nbsp;* Activation function &#8211; adds database settings<br />
&nbsp;*<br />
&nbsp;* @return void<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> Activate<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Mode&#8217;</span><span class="sy0">,</span> &nbsp; <span class="st_h">&#8216;free&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8221;</span><span class="sy0">,</span> <span class="st_h">&#8216;yes&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Cid&#8217;</span><span class="sy0">,</span> &nbsp; &nbsp;<span class="st_h">&#8221;</span><span class="sy0">,</span> &nbsp; &nbsp; <span class="st_h">&#8221;</span><span class="sy0">,</span> <span class="st_h">&#8216;yes&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Width&#8217;</span><span class="sy0">,</span> &nbsp;<span class="st_h">&#8217;160&#8242;</span><span class="sy0">,</span> &nbsp;<span class="st_h">&#8221;</span><span class="sy0">,</span> <span class="st_h">&#8216;yes&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; add_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Height&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8217;120&#8242;</span><span class="sy0">,</span> &nbsp;<span class="st_h">&#8221;</span><span class="sy0">,</span> <span class="st_h">&#8216;yes&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This will be triggered when a user installs the plugin and the default options will be saved to the WordPress options database.</p>
<p>I have also added a deactivation hook to clean up the options from the database when the plugin is deactivated:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;">register_deactivation_hook<span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">&#8216;Deactivate&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
&nbsp;* Deactivation function &#8211; removes database settings<br />
&nbsp;*<br />
&nbsp;* @return void<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> Deactivate<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; delete_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Mode&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; delete_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Cid&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; delete_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Width&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; delete_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Height&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>The default options are set to use the free version of Thumbshots, so the plugin instantly works on activation without any changes to the default settings. To complete the database integration I have also added a function to get the default options from the database when the plugin is loaded (this function is run from the constructor):</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
&nbsp;* Populate settings from WP<br />
&nbsp;*<br />
&nbsp;* @return void<br />
&nbsp;*/</span><br />
<span class="kw2">function</span> Populate_Settings<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Usage mode (defaults to free if database settings are missing)</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$mode</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Mode&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mode</span> <span class="sy0">=</span> <span class="re0">$mode</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Thumbshots cid for paid mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$cid</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Cid&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">cid</span> <span class="sy0">=</span> <span class="re0">$cid</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Image width for paid mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$width</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Width&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">width</span> <span class="sy0">=</span> <span class="re0">$width</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Image height for paid mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re0">$height</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st_h">&#8216;WP_Thumbshot_Preview_Height&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> <span class="kw4">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">height</span> <span class="sy0">=</span> <span class="re0">$height</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Note: The functions listed here are used as part of the object defined in my previous post.</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.philbayfield.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.philbayfield.com/2009/10/02/wordpress-plugin-database-integration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Plugin &#8211; Further deveopment</title>
		<link>http://www.philbayfield.com/2009/09/29/wordpress-plugin-further-deveopment/</link>
		<comments>http://www.philbayfield.com/2009/09/29/wordpress-plugin-further-deveopment/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 17:46:00 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.philbayfield.com/?p=62</guid>
		<description><![CDATA[Now that I have a very simple working plugin it&#8217;s time for a little clean up. Before I start adding addition functions and build additional features in messy procedural style it makes sense at this state to make it object orientated. WordPress continues to support PHP 4.3 and upwards, hence the plugin should also support [...]]]></description>
			<content:encoded><![CDATA[<p>Now that I have a very simple working plugin it&#8217;s time for a little clean up.</p>
<p>Before I start adding addition functions and build additional features in messy procedural style it makes sense at this state to make it object orientated. WordPress continues to support PHP 4.3 and upwards, hence the plugin should also support PHP 4 configurations.</p>
<p>Here is the class made from the original function, variables have been moved to the object&#8217;s global scope, the hooks are included in the constructor and the Render() function now contains the regex replacements:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="kw2">class</span> WP_Thumbshot_Preview <span class="br0">&#123;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Which mode to use, free or paid.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var string<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$mode</span> <span class="sy0">=</span> <span class="st_h">&#8216;free&#8217;</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* The user id (for paid mode).<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var integer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$cid</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* The image width<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var integer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$width</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* The image height<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @var integer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> <span class="re0">$height</span><span class="sy0">;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Constructor<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @return void<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> WP_Thumbshot_Preview<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; add_filter<span class="br0">&#40;</span><span class="st_h">&#8216;the_content&#8217;</span><span class="sy0">,</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re0">$this</span><span class="sy0">,</span> <span class="st_h">&#8216;Render&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></p>
<p>&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Render the content<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @param $content string<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* @return string<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> Render<span class="br0">&#40;</span><span class="re0">$content</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Free mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mode</span> <span class="sy0">==</span> <span class="st_h">&#8216;free&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span> <span class="sy0">=</span> <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;/\[preview\](.+?)\[\/preview\]/i&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;&lt;img src=<span class="es1">\&quot;</span>http://open.thumbshots.org/image.aspx?url=<span class="es4">$1</span><span class="es1">\&quot;</span> /&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es4">$1</span>&lt;/a&gt;&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Paid mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">mode</span> <span class="sy0">==</span> <span class="st_h">&#8216;paid&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span> <span class="sy0">=</span> <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;/\[preview\](.+?)\[\/preview\]/i&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;&lt;img src=<span class="es1">\&quot;</span>http://simple.thumbshots.com/image.aspx?cid=<span class="es4">$this-&gt;cid</span>&amp;v=1&amp;w=<span class="es4">$this-&gt;width</span>&amp;h=<span class="es4">$this-&gt;height</span>&amp;url=<span class="es4">$1</span><span class="es1">\&quot;</span> /&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es4">$1</span>&lt;/a&gt;&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$content</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>This is much tidier than before <img src='http://www.philbayfield.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Now to make everything work all that is required is an instance of the object:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="kw2">new</span> WP_Thumbshot_Preview<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.philbayfield.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.philbayfield.com/2009/09/29/wordpress-plugin-further-deveopment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My first WordPress Plugin</title>
		<link>http://www.philbayfield.com/2009/09/29/my-first-wordpress-plugin/</link>
		<comments>http://www.philbayfield.com/2009/09/29/my-first-wordpress-plugin/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 00:59:33 +0000</pubDate>
		<dc:creator>Phil</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.philbayfield.com/?p=50</guid>
		<description><![CDATA[As I have an account with Thumbshots.com I thought it would be nice to include it on my blog and have preview images of links in posts. Despite the 1000&#8242;s of WordPress plugins available, unfortunately none of them worked specifically for Thumbshots. I noticed there were a few similar plugins which worked with alternative thumbnail [...]]]></description>
			<content:encoded><![CDATA[<p>As I have an account with <a title="Thumbshots.com" href="http://www.thumbshots.com/" target="_blank">Thumbshots.com</a> I thought it would be nice to include it on my blog and have preview images of links in posts. Despite the 1000&#8242;s of WordPress plugins available, unfortunately none of them worked specifically for Thumbshots. <img src='http://www.philbayfield.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>I noticed there were a few similar plugins which worked with alternative thumbnail sites, so initially thought that I could hack them up a bit to use with Thumbshots. Another dead end, none of them seamed to have the features I was looking for.</p>
<p>So it looks like I&#8217;ll have to make a plugin&#8230;</p>
<p>In the whole 24 hours I have been using this version of WordPress I have been impressed with how it has evolved since I last used it, especially in that it is so easy to use. Plugin development is no exception to this.</p>
<p>There are 2 versions of Thumbshots, both a free and paid version (on .org and .com respectively), so it makes sense that if I am to eventually get this plugin to a point where I can publish it that it should support both. The free one can also be used &#8216;out of the box&#8217; without an account or any configuration, whereas the paid one obviously requires an account and additional settings.</p>
<p>To get the plugin to work I needed to create the plugin information which is simply stuck in a comment block and WordPress recognises it, it looks something like this:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="coMULTI">/*<br />
Plugin Name: WP Thumbshot Preview<br />
Plugin URI: http://www.philbayfield.com<br />
Description: Add a preview image to a link using &lt;a href=&quot;http://www.thumbshots.org/&quot;&gt;Thumbshots.org&lt;/a&gt; or &lt;a href=&quot;http://www.thumbshots.com/&quot;&gt;Thumbshots.com&lt;/a&gt; account.<br />
Version: 0.1<br />
Author: Phil Bayfield<br />
Author URI: http://www.philbayfield.com<br />
/*</span></div>
</div>
<p>Secondly I needed a short function to perform the core functionality of the plugin. To enable the user to choose when they want to see a preview it made sense to use bbcode style tags so it could be easily used when adding or editing a post. Any URL wrapped in [preview] tags would be converted to a link with thumbnail image. I&#8217;ve hard coded the settings for now for testing purposes, the end result is this function:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;"><span class="co4">/**<br />
* Content filter function<br />
*<br />
* @param $content string<br />
* @return string<br />
*/</span><br />
<span class="kw2">function</span> wp_thumbshot_preview<span class="br0">&#40;</span><span class="re0">$content</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; * Plugin usage mode (free or paid)<br />
&nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp; &nbsp; &nbsp; &nbsp; * @var string<br />
&nbsp; &nbsp; &nbsp; &nbsp; * @todo this needs to be replaced with a get_option call<br />
&nbsp; &nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$mode</span> <span class="sy0">=</span> ‘paid’<span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Paid mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$mode</span> <span class="sy0">==</span> ‘paid’<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * Thumbshots user id<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @var integer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @todo this needs to be replaced with a get_option call<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$cid</span> &nbsp; &nbsp;<span class="sy0">=</span> <span class="nu0">1508</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * Image width<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @var integer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @todo this needs to be replaced with a get_option call<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$width</span> &nbsp;<span class="sy0">=</span> <span class="nu0">160</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co4">/**<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * Image height<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @var integer<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * @todo this needs to be replaced with a get_option call<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; */</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$height</span> <span class="sy0">=</span> <span class="nu0">120</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Replace all [preview] tags</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span> <span class="sy0">=</span> <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;/\[preview\](.+?)\[\/preview\]/i&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;&lt;img src=<span class="es1">\&quot;</span>http://simple.thumbshots.com/image.aspx?cid=<span class="es4">$cid</span>&amp;v=1&amp;w=<span class="es4">$width</span>&amp;h=<span class="es4">$height</span>&amp;url=<span class="es4">$1</span><span class="es1">\&quot;</span> /&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es4">$1</span>&lt;/a&gt;&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Free mode</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// Replace all [preview] tags</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span> <span class="sy0">=</span> <a href="http://www.php.net/preg_replace"><span class="kw3">preg_replace</span></a><span class="br0">&#40;</span><span class="st0">&quot;/\[preview\](.+?)\[\/preview\]/i&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;&lt;img src=<span class="es1">\&quot;</span>http://open.thumbshots.org/image.aspx?url=<span class="es4">$1</span><span class="es1">\&quot;</span> /&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;a href=<span class="es1">\&quot;</span><span class="es4">$1</span><span class="es1">\&quot;</span> target=<span class="es1">\&quot;</span>_blank<span class="es1">\&quot;</span>&gt;<span class="es4">$1</span>&lt;/a&gt;&quot;</span><span class="sy0">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$content</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$content</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Finally to get this to work a hook is required which tells WordPress to run my new function on the post content:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace; font-size: 1.2em;">add_filter<span class="br0">&#40;</span><span class="st_h">&#8216;the_content&#8217;</span><span class="sy0">,</span><span class="st_h">&#8216;wp_thumbshot_preview&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>That&#8217;s it, all done, this is what it produces:</p>
<table>
<tr>
<td><div style="float: left; text-align: center">
			    <a href="http://www.philbayfield.com" target="_blank"><img src="http://simple.thumbshots.com/image.aspx?cid=1508&v=1&w=200&h=150&url=http://www.philbayfield.com" /></a><br /><a href="http://www.philbayfield.com" target="_blank">http://www.philbayfield.com</a></div><br style="clear: both" /></td>
<td><div style="float: left; text-align: center">
			    <a href="http://www.google.co.uk" target="_blank"><img src="http://simple.thumbshots.com/image.aspx?cid=1508&v=1&w=200&h=150&url=http://www.google.co.uk" /></a><br /><a href="http://www.google.co.uk" target="_blank">http://www.google.co.uk</a></div><br style="clear: both" /></td>
<td><div style="float: left; text-align: center">
			    <a href="http://www.pimpedentertainment.com" target="_blank"><img src="http://simple.thumbshots.com/image.aspx?cid=1508&v=1&w=200&h=150&url=http://www.pimpedentertainment.com" /></a><br /><a href="http://www.pimpedentertainment.com" target="_blank">http://www.pimpedentertainment.com</a></div><br style="clear: both" /></td>
</tr>
</table>
<p>To do:</p>
<ul>
<li>Add default values</li>
<li>Store default values in the database</li>
<li>Modify the function to retrieve the settings from the database</li>
<li>Add a page in the admin console to customise the settings</li>
<li>Convert the plugin to OO format</li>
</ul>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.philbayfield.com/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.philbayfield.com/2009/09/29/my-first-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
