<?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>Digging into WordPress &#187; plugin</title>
	<atom:link href="http://digwp.com/tag/plugin/feed/" rel="self" type="application/rss+xml" />
	<link>http://digwp.com</link>
	<description>Take your WordPress skills to the next level.</description>
	<lastBuildDate>Thu, 09 Feb 2012 19:03:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WordPress CMS Plugins</title>
		<link>http://digwp.com/2012/01/wordpress-cms-plugins/</link>
		<comments>http://digwp.com/2012/01/wordpress-cms-plugins/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 17:59:05 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=5607</guid>
		<description><![CDATA[To make room for new content for the DiW 3.3 update, we&#8217;re &#8220;excerpting&#8221; this section into its own blog post. Here you&#8217;ll find an extensive round-up of CMS plugins for WordPress. Includes CMS plugins for better admin functionality, user-role management, custom content display, e-commerce &#38; shopping carts, forums, newsletters, and more. Administration Tools These plugins [...]]]></description>
			<content:encoded><![CDATA[<p>To make room for new content for the <abbr title="Digging into WordPress">DiW</abbr> 3.3 update, we&#8217;re &#8220;excerpting&#8221; this section into its own blog post. Here you&#8217;ll find an extensive round-up of CMS plugins for WordPress. Includes CMS plugins for better admin functionality, user-role management, custom content display, e-commerce &amp; shopping carts, forums, newsletters, and more.</p>
<p><span id="more-5607"></span></p>
<h3>Administration Tools</h3>
<p>These plugins provide CMS-like functionality to the WordPress Admin area.</p>
<ul>
<li><a href="http://digwp.com/u/55">WP-CMS Post Control</a> &mdash; Provides complete control over the Write-Page and Write-Post areas of the WordPress Admin. Enables you to hide unwanted items, disable the Flash uploader, kill post revisions, and even add a personal message.</li>
<li><a href="http://digwp.com/u/56">WP-CMS</a> &mdash; Transforms the Admin area to focus more on page creation and less on post creation. Designed to simplify the whole process for your newbie clients. You can even disable the blog functionality entirely.</li>
<li><a href="http://digwp.com/u/57">Flutter</a> &mdash; Enables you to edit posts without leaving the post page and also provides custom write panels that enable further publishing functionality.</li>
<li><a href="http://digwp.com/u/58">Supple Forms</a> &mdash; Enables you to create custom write panels, as well as format and insert values into posts using shortcodes and snippets of HTML.</li>
<li><a href="http://digwp.com/u/59">Custom Write Panel</a> &mdash; Enables you to create additional write panels with customized input fields. Add textboxes, checkboxes, radio-buttons, dropdown menus, and more.</li>
<li><a href="http://digwp.com/u/79">Pods </a> &mdash; Comprehensive CMS functionality, enabling you to create, manage, and display custom content types. Features automatic pagination, public-form filtering, access control, menu editing, and more.</li>
</ul>
<h3>User Role Management</h3>
<ul>
<li><a href="http://digwp.com/u/145">Members</a> &mdash; Comprehensive user-, role-, and content-management plugin that was created to make WordPress a more powerful CMS. Provides more control over your blog with an extensive collection of component-based features.</li>
<li><a href="http://digwp.com/u/567">s2Member</a> &mdash; s2Member provides robust tools for setting up a PayPal-driven membership site, including secure members-only content with custom roles and capabilities.</li>
<li><a href="http://digwp.com/u/60">Role Scoper</a> &mdash; Provides you the ability to specify different permissions levels for different WordPress roles. Also provides options for implementing user groups.</li>
<li><a href="http://digwp.com/u/61">Disclose-Secret</a> &mdash; Enables you to hide specified posts from users unless they meet certain criteria.</li>
<li><a href="http://digwp.com/u/62">Page Restrict</a> &mdash; Enables you to restrict specified pages to logged-in users.</li>
</ul>
<h3>Ordering, Filtering, Limiting and Displaying Content</h3>
<ul>
<li><a href="http://digwp.com/u/65">AStickyPostOrderER</a> &mdash; Enables you to customize post-display order for category views, archive views, and even sitewide.</li>
<li><a href="http://digwp.com/u/66">Advanced Category Excluder</a> &mdash; Provides advanced content separation and category management for WordPress. Exclude any number of categories according to your needs. Also provides control over feeds and search results.</li>
<li><a href="http://digwp.com/u/519">Custom Post Limits</a> &mdash; Provides control over the number of posts that appear on the home page, in various archive views, and in search results.</li>
<li><a href="http://digwp.com/u/495">Custom Query String Reloaded</a> &mdash; Rework of the original plugin, CQS Reloaded controls the number of posts displayed on just about any type of page view, including archives, months, categories, home page, search, and many more. For more information on CQS Reloaded, check out the popout in section 5.1.4.</li>
</ul>
<h3>eCommerce and Shopping Carts</h3>
<ul>
<li><a href="http://digwp.com/u/69">eShop</a> &mdash; Provides shopping-cart functionality that includes customizable product listings, multiple product options, advanced payment options, basic statistics, and more.</li>
<li><a href="http://digwp.com/u/70">WP e-Commerce</a> &mdash; Provides an “elegant and easy to use fully featured shopping cart” that claims to be the “most complete and powerful Shopping Plugin you will find for WordPress.”</li>
<li><a href="http://digwp.com/u/71">YAK for WordPress</a> &mdash; Provides basic shopping-cart functionality that associates products with blog posts.
<li><a href="http://digwp.com/u/72">Quick Shop</a> &mdash; Adds a sidebar widget that displays cart contents to the user and enables easy item removal. Also enables you to easily add products to your posts and pages.</li>
<li><a href="http://digwp.com/u/598">Cart66 Lite</a> &mdash; Shopping cart plugin that enables you to sell digital and/or physical products with a host of useful options. Features include advanced shipping options, custom fields for products, customizable email receipts, Amazon S3 integration, and much more.</li>
</ul>
<h3>Email Mailing List and Newsletter Plugins</h3>
<ul>
<li><a href="http://digwp.com/u/74">WP-Campaign-Monitor</a> &mdash; Email newsletter and SMS functionality enabling users to send campaigns, track results, and manage subscribers. Even includes a plug-n-play sidebar widget.</li>
<li><a href="http://digwp.com/u/75">PHPList Form Integration</a> &mdash; Enables users to easily subscribe to your newsletter or RSS feed from any page on your blog. Designed to work with PHPList, an excellent open-source newsletter manager.
<li><a href="http://digwp.com/u/76">WordPress Double Opt-In Manager Widget</a> &mdash; Enables users to subscribe to your mailing list by way of a double opt-in method that includes the email form and a confirmation email.
<li><a href="http://digwp.com/u/466">MailChimp</a> &mdash; MailChimp is a third-party email newsletter sending service. They have an official plugin to help integrate with WordPress.</li>
</ul>
<h3>Miscellaneous CMS Plugins</h3>
<ul>
<li><a href="http://digwp.com/u/80">ProjectManager</a> &mdash; Manage any number of projects with recurrent datasets. Great for portrait systems, music and DVD collections, and just about anything else imaginable.</li>
<li><a href="http://digwp.com/u/81">WP-PostRatings</a> &mdash; Enables users to rate your post content. Highly customizable. One of the best.</li>
<li><a href="http://digwp.com/u/520">User Submitted Posts</a> &mdash; Enables visitors to submit posts and images from anywhere on your site. User-submitted posts optionally include tags, categories, post title, URL and more.</li>
</ul>
<h3>Using WordPress as a Forum</h3>
<p>Although forum functionality is not (yet) built into the WordPress core, implementing a forum on your site is easily accomplished with the help of these awesome plugins.</p>
<ul>
<li><a href="http://digwp.com/u/119">bbPress Forum</a> &mdash; bbPress is simple, fast, and elegant forum software from the same people who make WordPress. bbPress is focused on web standards, ease of use, ease of integration, and speed.</li>
<li><a href="http://digwp.com/u/521">Simple:Press Forum</a>, aka <em>Simple Forum</em> &mdash; A feature-rich forum plugin for WordPress that fully integrates into your WordPress-powered site. Fully customizable and includes plenty of skins and icons to get you started.</li>
</ul>
<h3>More Forum Plugins</h3>
<p>Here are two more useful forum plugins for WordPress, both include great features and look like great forum solutions.</p>
<ul>
<li><a href="http://digwp.com/u/472">Tal.ki Embeddable Forums</a></li>
<li><a href="http://digwp.com/u/473">Zingiri Forum</a></li>
</ul>
<h3>What else?</h3>
<p>Know of a sweet CMS-related plugin that needs mentioned? Shout it out in the comments to share with the community!</p>
<hr />
<p><small>© 2012 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2012/01/wordpress-cms-plugins/">Permalink</a> | <a href="http://digwp.com/2012/01/wordpress-cms-plugins/#comments">32 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2012/01/wordpress-cms-plugins/&title=WordPress CMS Plugins">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/cms/" rel="tag">CMS</a>, <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a>, <a href="http://digwp.com/tag/tips/" rel="tag">tips</a>, <a href="http://digwp.com/tag/tools/" rel="tag">tools</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2012/01/wordpress-cms-plugins/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>WordPress Security Lockdown</title>
		<link>http://digwp.com/2010/07/wordpress-security-lockdown/</link>
		<comments>http://digwp.com/2010/07/wordpress-security-lockdown/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 21:04:44 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=2413</guid>
		<description><![CDATA[This article is split into two parts for ez reference. First some information on the evil WordPress &#8220;Pharma Hack&#8221;, and then a recipe for protecting your site with a solid security lockdown. Choose your own adventure: Pharma Hacked Security Lockdown Pharmaceutical Apocalypse A few weeks ago, DigWP.com was hit with the so-called Pharma Hack. We [...]]]></description>
			<content:encoded><![CDATA[<p>This article is split into two parts for <abbr title="SO easy">ez</abbr> reference. First some information on the evil WordPress &ldquo;Pharma Hack&rdquo;, and then a recipe for protecting your site with a solid security lockdown. Choose your own adventure:</p>
<ul>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#pharma-hack">Pharma Hacked</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#security-lockdown">Security Lockdown</a></li>
</ul>
<p><span id="more-2413"></span></p>
<h3 id="pharma-hack">Pharmaceutical Apocalypse</h3>
<p>A few weeks ago, <a href="http://digwp.com/">DigWP.com</a> was hit with the so-called <a href="http://www.pearsonified.com/2010/04/wordpress-pharma-hack.php" title="How to Diagnose and Remove the WordPress Pharma Hack">Pharma Hack</a>. We discovered the hack after some Google results turned up all sorts of spammy pharmaceutical garbage littered throughout posts, links, and titles. The tricky part about the hack is that it injects the spam garbage only when your site&rsquo;s pages are requested by a <em>search bot</em> (e.g., googlebot). So when you view your pages in a <em>browser</em>, everything seems perfectly normal. Put simply, the hack is <strong>cloaked</strong>. We had no idea anything was wrong until about <em>two weeks</em> after the attack. During that time a majority of our search engine results were nuked with evil pharma spam. Ick.</p>
<p>Flash forward three weeks later and things are locked-down tight. The Pharma Hack has not returned, and most of the spam garbage in the search results has been filtered out and replaced with clean pages. At the time of the attack, DigWP was running WordPress 2.9/3.0 without any sort of <em>additional</em> site security. We were just using whatever &ldquo;default&rdquo; protection available from either WordPress or Media Temple. After detecting the hack, several days were spent cleaning it up and locking things down. At first, it seemed like an <em>impossible</em> hack to fix &ndash; nothing seemed to work. We ran through the following routine, hoping to fix it:</p>
<ul>
<li>Locate and remove hacked <code>404.php</code> file</li>
<li>Locate and remove hacked content from database</li>
<li>Replace entire set of salt keys</li>
<li>Upload new WordPress files</li>
<li>Restore previous versions of other files</li>
<li>Restore database to previous version</li>
</ul>
<p>These actions alleviate the symptoms, but they don&rsquo;t even touch the actual virus, which somehow regenerates the (base64) encoded spam script. As far as we know, the Pharma Hack works like this:</p>
<ol>
<li>Evil script gains access to your WordPress site</li>
<li>Encoded spam script injected into database</li>
<li>Script inserts spam garbage into pages requested by search bots</li>
<li>Script makes no changes to pages requested by browsers</li>
</ol>
<p>Within the database, the spam script is generated in any/all of these <code>option_name</code> fields:</p>
<ul id="encoded-gibberish">
<li><code>class_generic_support</code></li>
<li><code>widget_generic_support</code></li>
<li><code>wp_check_hash</code></li>
<li><code>ftp_credentials</code></li>
<li><code>rss_[string] e.g.,</code><br /><code>rss_7988287cd8f4f531c6b94fbdbc4e1caf</code></li>
</ul>
<p>If these fields are present and contain <a href="http://digwp.com/examples/PharmaHack/Pharma-Hack_2010-07-11.txt" title="encoded Pharma Hack script">super-long strings of encoded gibberish</a>, your site&rsquo;s infected. You can assess the damages by examining the search results for your site (note: other spam keywords may be used):</p>
<pre><code>site:digwp.com cipro OR meridia OR cialis</code></pre>
<p>If you&rsquo;re hit, hopefully you catch it <em>before</em> googlebot crawls along. But even if you have <em>thousands</em> of hacked pages appearing in the search index, it&rsquo;s not too late to clean things up and secure your site. Here is how we did it..</p>
<h3 id="security-lockdown">WordPress Security Lockdown</h3>
<p>This security strategy is best implemented on <em>new</em> sites. It just makes everything (like renaming table prefixes) <em>so</em> much easier. Either way, you want to start with a clean batch of files. Upload a fresh copy of WordPress, update your plugins, theme files, and so on. You may want to <a href="http://perishablepress.com/press/2010/05/19/htaccess-redirect-maintenance-page-site-updates/" title="htaccess Redirect to Maintenance Page">redirect visitors to a maintenance page</a> while you work on your site. That said, here is our five-step Security Lockdown for WordPress:</p>
<ol style="padding-bottom:15px;">
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#file-permissions">File Permissions</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#file-protection">File Protection</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#database-protection">Database Protection</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#essential-plugins">Essential Plugins</a></li>
<li><a href="http://digwp.com/2010/07/wordpress-security-lockdown/#security-details">Important Details</a></li>
</ol>
<h4 id="file-permissions">[<a href="#security-lockdown" title="Jump to Menu">1</a>] File Permissions</h4>
<p>After uploading fresh files, the next step is to ensure proper file permissions. WordPress defaults to <code>644</code> for files and <code>755</code> permissions for folders. Make sure these are set properly. While cleaning up, we noticed some crazy permission settings for sensitive files. For example, <code>wp-config.php</code> was set to <code>777</code> &ndash; executable and writable by the entire world!! Make sure you don&rsquo;t see anything like that, and if you do, fix it.</p>
<h4 id="file-protection">[<a href="#security-lockdown" title="Jump to Menu">2</a>] File Protection</h4>
<p>In addition to setting proper file permissions, we can also lock down key files with <code>.htaccess</code>. There are numerous files to protect, perhaps most importantly the <code>wp-config.php</code> file, which contains your database login information. Place the following code in your site&rsquo;s root <code>.htaccess</code> file to protect it:</p>
<pre><code># SECURE WP-CONFIG.PHP
&lt;Files wp\-config\.php&gt;
 Order Deny,Allow
 Deny from all
&lt;/Files&gt;</code></pre>
<p>You may also want to <a href="http://perishablepress.com/press/2009/07/13/htaccess-password-protection-tricks/" title="HTAccess Password-Protection Tricks">password-protect</a> your <code>wp-admin</code> directory, but it may cause more trouble than it&rsquo;s worth.</p>
<h4 id="database-protection">[<a href="#security-lockdown" title="Jump to Menu">3</a>] Database Protection</h4>
<p>Changing the default table prefix is one of the <em>best</em> ways to protect your database. Malicious scripts need targets, and default targets are easy to hit. Change <code>wp_</code> to something more like a password. Some <a href="http://www.random.org/strings/" title="Random String Generator">random string</a> like &ldquo;<code>crUQZPadESeKSy8Q_</code>&rdquo; will make your tables difficult to hit. Like having a built-in password for your database&nbsp;:)</p>
<p>There are two ways to change your prefixes: the easy way and the hard way. The easy way is to add the following line to your <code>wp-config.php</code> file <em>before</em> installing WordPress (important: change the random string to something unique):</p>
<pre><code>$table_prefix  = 'crUQZPadESeKSy8Q_'; // custom table prefix</code></pre>
<p>Do that <em>before</em> running the install script and WordPress takes care of the prefix naming automagically when it creates the database. Going forward, there is no reason not to change default prefixes for all future WordPress installs. For existing sites, you can do it the hard way <a href="http://blogsecurity.net/wordpress/wp-prefix-changer-v11-released" title="WP Prefix Changer v1.1 released">using a plugin</a> or <a href="http://digwp.com/2010/10/change-database-prefix/" title="Change Your Database Prefix to Improve Security">doing it manually</a>.</p>
<h4 id="essential-plugins">[<a href="#security-lockdown" title="Jump to Menu">4</a>] Essential Plugins</h4>
<p>After exploring the vast crop of <a href="http://wordpress.org/extend/plugins/tags/security" title="WordPress<br />
Plugin Directory">WordPress security plugins</a>, we narrowed it down to four plugins that collectively do just about everything in the easiest way possible:</p>
<p><strong><a href="http://mattwalters.net/projects/wordpress-file-monitor/">WP File Monitor</a></strong></p>
<p>This plugin tracks changes made to your files. If/when anything changes, it notifies you via Admin Dashboard alert and/or email alert. So anytime a file is changed, moved, added, or removed, WP File Monitor lets you know. Here is a list of features:</p>
<ul>
<li>Monitors file system for added/deleted/changed files</li>
<li>Sends email when a change is detected</li>
<li>Multiple email formats for alerts</li>
<li>Administration area alert to notify you of changes in case email is not received</li>
<li>Ability to monitor files for changes based on file hash or timestamp</li>
<li>Ability to exclude directories from scan</li>
<li>Site URL included in notification email in case plugin is in use on multiple sites</li>
</ul>
<p>This is one of my favorite plugins. It&rsquo;s perfect for keeping an eye on things. If anyone gets in and messes around with your files, you&rsquo;ll know about it immediately, and even better, you&rsquo;ll know <em>exactly</em> which files have been affected.</p>
<p><strong><a href="http://wordpress.org/extend/plugins/wp-security-scan/">WP Security Scan</a></strong></p>
<p>This plugin scans your WordPress installation for security vulnerabilities and suggests corrective actions. The scan report informs you of any problems with file permissions, system variables, and much more:</p>
<ul>
<li>Passwords</li>
<li>File permissions</li>
<li>Database security</li>
<li>Version hiding</li>
<li>WordPress admin protection/security</li>
<li>Removes WP Generator META tag from core code</li>
</ul>
<p>WP Security Scan also provides a nice summary of server information and latest scan information. Performing a new scan is immediate with the click of a button. Very easy.</p>
<p><strong><a href="http://wordpress.org/extend/plugins/ultimate-security-check/">Ultimate Security Check</a></strong></p>
<p>This plugin provides even more security information, helping you to identify potential issues with your WordPress installation. It scans your site for &ldquo;hundreds of known threats,&rdquo; and then &ldquo;grades&rdquo; your level of site security. Here are some of the key things it checks:</p>
<ul>
<li>Checks for updates</li>
<li>Checks configuration file</li>
<li>Checks if config file is located in unsecured place</li>
<li>Checks presence of install script</li>
<li>Checks server configuration</li>
<li>Checks database</li>
<li>Checks code</li>
</ul>
<p>And quite a bit more. The best part about Ultimate Security Check is that it&rsquo;s so <em>easy</em> to use.</p>
<p><strong><a href="http://wordpress.org/extend/plugins/secure-wordpress/">Secure WordPress</a></strong></p>
<p>This plugin takes care of all those &ldquo;little&rdquo; things. Instead of installing a bunch of smaller plugins or <a href="http://digwp.com/2010/03/wordpress-functions-php-template-custom-functions/" title="WordPress functions.php Template with 15 Essential Custom Functions">custom functions</a> for this stuff, the Secure WordPress plugin does it all for you:</p>
<ol>
<li>Removes error-information on login-page</li>
<li>Adds index.php plugin-directory (virtual)</li>
<li>Removes the wp-version, except in admin-area</li>
<li>Removes Really Simple Discovery</li>
<li>Removes Windows Live Writer</li>
<li>Remove core update information for non-admins</li>
<li>Remove plugin-update information for non-admins</li>
<li>Remove theme-update information for non-admins (only WP 2.8 and higher)</li>
<li>Hide wp-version in backend-dashboard for non-admins</li>
<li><a href="http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/" title="Protect WordPress Against Malicious URL Requests">Block Bad Queries</a></li>
</ol>
<p>Having all of this (and much more) done with a few clicks in the WordPress Admin is easy <em>and</em> effective.</p>
<h4 id="security-details">[<a href="#security-lockdown" title="Jump to Menu">5</a>] Important Details</h4>
<p>The previous four steps comprise the majority of our security lockdown, but there are some important details to consider:</p>
<ul>
<li>Keep your WordPress install, plugins, themes, and scripts updated with current versions</li>
<li>Use <strong>strong</strong> passwords and change them often</li>
<li>Disable user registration if not needed/used for your site</li>
<li>Check roles and permissions for all users</li>
<li>Clean up and consolidate old/loose files</li>
<li>Remove unused plugins and themes</li>
<li>Check permissions of <code>upload</code>, <code>upgrade</code>, and <code>backup</code> directories</li>
<li>Keep a backup of your site files</li>
<li>Keep your database optimized and backed up</li>
</ul>
<p>We did these things here at DigWP.com, but certain tips may not apply to every site. As a side note, despite our new security lockdown, I am still concerned/confused about how to handle the <code>upload</code>, <code>upgrade</code>, and <code>backup</code> directories. It seems dangerous to leave these folders set with <code>777</code> permissions, and for many shared hosts, that seems to be the required setting. I would be interested in hearing any ideas about securing these directories.</p>
<h3>Bottom Line</h3>
<p>There is no such thing as perfect security. If someone wants in bad enough, they&rsquo;re going to find a way, despite your best efforts at staying secure. Fortunately, most malicious scripts target the least common denominator, default WordPress installs. At the very least, ensure proper file permissions, secure <code>wp-config.php</code>, and use unique database prefixes. Together, these three steps will put your site out of reach for a vast majority of malicious scripts and other automated attacks. Of course, there are many other ways to <a href="http://digwp.com/2009/11/how-to-secure-your-new-wordpress-installation/" title="How to Secure Your New WordPress Installation">strengthen your site&rsquo;s security</a>, depending on how far you want to go with it. The lockdown strategy presented in this article provides strong security in the most efficient way possible, but there is always room for improvement, so share your ideas and help the community secure their WordPress.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/07/wordpress-security-lockdown/">Permalink</a> | <a href="http://digwp.com/2010/07/wordpress-security-lockdown/#comments">44 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/07/wordpress-security-lockdown/&title=WordPress Security Lockdown">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/database/" rel="tag">database</a>, <a href="http://digwp.com/tag/hacking/" rel="tag">hacking</a>, <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/07/wordpress-security-lockdown/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>WordPress JSON API Plugin</title>
		<link>http://digwp.com/2010/05/wordpress-json-api-plugin/</link>
		<comments>http://digwp.com/2010/05/wordpress-json-api-plugin/#comments</comments>
		<pubDate>Sat, 29 May 2010 19:34:51 +0000</pubDate>
		<dc:creator>Chris Coyier</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=2153</guid>
		<description><![CDATA[WordPress already kind of has an XML API. Basically, RSS feeds. WordPress creates feeds for all kinds of stuff: recent posts, comment threads on any Page or Post that has comments, category-specific, tag-specific, and more. The codex covers all this and we&#8217;ve also covered creating your own unique feeds that could literally be from any [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress already kind of has an XML API. Basically, RSS feeds. WordPress creates feeds for all kinds of stuff: recent posts, comment threads on any Page or Post that has comments, category-specific, tag-specific, and more. The codex <a href="http://codex.wordpress.org/WordPress_Feeds">covers all this</a> and we&#8217;ve also covered <a href="http://digwp.com/2009/09/easy-custom-feeds-in-wordpress/">creating your own unique feeds</a> that could literally be from any data in your WordPress database.</p>
<p>So RSS is pretty sweet. There are lots of feed parsers out there that can do cool stuff with feeds. XML is pretty cool. PHP5 has functions to make decently quick work of parsing XML. </p>
<p><strong>But what if you are working with JavaScript?</strong> XML + JavaScript kinda sucks. The <a href="http://www.json.org/">JSON</a> format is approximately one million times easier to work with. Fortunately there is <a href="http://wordpress.org/extend/plugins/json-api/">a kick-ass plugin</a> for us!</p>
<p><span id="more-2153"></span></p>
<h3>The Plugin&#8230;</h3>
<p>is by <a href="http://phiffer.org/">Dan Phiffer</a> who created it for for working with the MoMA (Museum of Modern Art) <a href="http://moma.org/explore/inside_out">blog</a>. Apparently it&#8217;s some Frankenstein&#8217;s monster of Ruby on Rails and WordPress. </p>
<p><a href="http://wordpress.org/extend/plugins/json-api/">WordPress JSON API Plugin</a></p>
<p>All you need to do is install and activate it, and you&#8217;ll have access to a new URL structure that servers up JSON data.</p>
<p>At its most simple:</p>
<pre><code>http://example.com/?json=1</code></pre>
<p>Which will return delicious, delicious JSON:</p>
<pre><code>{
  "status": "ok",
  "count": 1,
  "count_total": 1,
  "pages": 1,
  "posts": [
    {
      "id": 1,
      "slug": "hello-world",
      "url": "http:\/\/localhost\/wordpress\/?p=1",
      "title": "Hello world!",
      "title_plain": "Hello world!",
      "content": "&lt;p&gt;Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!&lt;\/p&gt;\n",
      "excerpt": "Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!\n",
      "date": "2009-11-11 12:50:19",
      "modified": "2009-11-11 12:50:19",
      "categories": [],
      "tags": [],
      "author": {
        "id": 1,
        "slug": "admin",
        "name": "admin",
        "first_name": "",
        "last_name": "",
        "nickname": "",
        "url": "",
        "description": ""
      },
      "comments": [
        {
          "id": 1,
          "name": "Mr WordPress",
          "url": "http:\/\/wordpress.org\/",
          "date": "2009-11-11 12:50:19",
          "content": "&lt;p&gt;Hi, this is a comment.&lt;br \/&gt;To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.&lt;\/p&gt;\n",
          "parent": 0
        }
      ],
      "comment_count": 1,
      "comment_status": "open"
    }
  ]
}</code></pre>
<p>The plugin page has comprehensive notes on <a href="http://wordpress.org/extend/plugins/json-api/other_notes/">how you can structure the URLs</a> to get just what you need back. </p>
<p>Of course, the more that you want, the larger the size of the data is, the harder it has to work, and the slower it can be. The plugin allows you to trim down what it returns to speed things up if needed. This is how to get just 10 posts, with a specific custom field, and only a few other things:</p>
<pre><code>http://example.com/?json=1&amp;count=10&amp;custom_fields=PostThumb&amp;include=title,custom_fields,excerpt</code></pre>
<h3>What might you use this for?</h3>
<p><a href="http://jqueryui.com/">jQuery UI</a> has recently released a new feature: <a href="http://docs.jquery.com/UI/Autocomplete">Autocomplete</a>. I learned that it basically consumes JSON data to populate what it autocompletes with. So I decided to try and connect the two and make an autocomplete search box for this site. </p>
<div class="image-wrap">
<img src="http://digwp.com/wp-content/blog-images/autocompletesearch.jpg" width="581" height="331" alt="" title="" />
</div>
<p>Try typing in like &#8220;CSS&#8221; or something and you can see some articles autocomplete below the input. You can select one and press return to go to that post. It&#8217;s kinda cheezy, probably not something I would roll out live, but it was a fun demo to work on. If you want to see the JavaScript that powers it, <a href="http://digwp.com/wp-content/themes/DiggingIntoWordPress-2/js/autocomplete.js">check it out</a>. </p>
<p>To be fair, I had to hack the plugin just slightly to get it to work. The autocomplete plugin wants a &#8220;value&#8221; and &#8220;label&#8221; data in the JSON, so I added them. It&#8217;s a pretty trivial adjustment so if anyone wants that code, let me know.</p>
<p><strong>UPDATE:</strong> Demo temporarily removed for security.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/05/wordpress-json-api-plugin/">Permalink</a> | <a href="http://digwp.com/2010/05/wordpress-json-api-plugin/#comments">13 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/05/wordpress-json-api-plugin/&title=WordPress JSON API Plugin">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/api/" rel="tag">API</a>, <a href="http://digwp.com/tag/javascript/" rel="tag">JavaScript</a>, <a href="http://digwp.com/tag/json/" rel="tag">JSON</a>, <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/05/wordpress-json-api-plugin/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Nice Way to Encourage Plugin Upgrading</title>
		<link>http://digwp.com/2010/03/nice-way-to-encourage-plugin-upgrading/</link>
		<comments>http://digwp.com/2010/03/nice-way-to-encourage-plugin-upgrading/#comments</comments>
		<pubDate>Thu, 25 Mar 2010 13:26:34 +0000</pubDate>
		<dc:creator>Chris Coyier</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1694</guid>
		<description><![CDATA[A while back we talked about upgrading plugins. Specifically the All-in-One SEO pack and the controversy surrounding how it turns it self off after (some) updates. This is what that plugin looks like when it needs an updating: Normal look for a plugin that needs updating But W3 Total Cache also needed an upgrading, and [...]]]></description>
			<content:encoded><![CDATA[<p>A while back we talked about upgrading plugins. Specifically the <a href="http://digwp.com/2010/01/why-all-in-one-seo-deactivates/">All-in-One SEO pack and the controversy surrounding</a> how it turns it self off after (some) updates. This is what that plugin looks like when it needs an updating:</p>
<div class="image-wrap">
<img src="http://digwp.com/wp-content/blog-images/allinoneupdate.png" width="570" height="162" alt="" title="" /><br />
Normal look for a plugin that needs updating
</div>
<p>But <a href="http://wordpress.org/extend/plugins/w3-total-cache/">W3 Total Cache</a> also needed an upgrading, and this is what <em>it</em> looked like&#8230;</p>
<p><span id="more-1694"></span></p>
<div class="image-wrap">
<img src="http://digwp.com/wp-content/blog-images/w3update.png" width="415" height="444" alt="" title="" /><br />
Now there is some info!
</div>
<p>This plugin clearly explains why upgrading would be a good idea. I like it. I think this should definitely be employed on plugins, especially on updates which may have seriously implications on your sites performance.</p>
<p>Oh and look, it doesn&#8217;t bug you with all the notes if it isn&#8217;t activated:</p>
<div class="image-wrap">
<img src="http://digwp.com/wp-content/blog-images/w3disabled.png" width="436" height="133" alt="" title="" />
</div>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/03/nice-way-to-encourage-plugin-upgrading/">Permalink</a> | <a href="http://digwp.com/2010/03/nice-way-to-encourage-plugin-upgrading/#comments">11 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/03/nice-way-to-encourage-plugin-upgrading/&title=Nice Way to Encourage Plugin Upgrading">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/03/nice-way-to-encourage-plugin-upgrading/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>How to Add Your Plugin to the WordPress Plugin Directory</title>
		<link>http://digwp.com/2010/03/add-plugin-to-wordpress-plugin-repository/</link>
		<comments>http://digwp.com/2010/03/add-plugin-to-wordpress-plugin-repository/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 07:49:12 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1548</guid>
		<description><![CDATA[Getting your plugins listed in the official WordPress Plugin Directory is considered a chore by many, but it&#8217;s nothing that should stop you from sharing your plugin with the community at large. Up until now, I haven&#8217;t really bothered with adding my plugin collection to the Directory, but after Herb Goodman helped to package my [...]]]></description>
			<content:encoded><![CDATA[<p>Getting your plugins listed in the official <a href="http://wordpress.org/extend/plugins/" title="Plugin Directory">WordPress Plugin Directory</a> is considered a chore by many, but it&rsquo;s nothing that should stop you from sharing your plugin with the community at large. Up until now, I haven&rsquo;t really bothered with adding <a href="http://perishablepress.com/press/2006/09/04/perishable-press-wordpress-plugins/" title="Perishable Press WordPress Plugins">my plugin collection</a> to the Directory, but after <a href="http://www.hsgoodman.org/" title="hsgoodman.org">Herb Goodman</a> helped to package my recent <a href="http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/" title="">Block Bad Queries plugin</a>, I figured now was a good time to dig in and learn the ropes. It turns out the process only took about an hour to complete, not including the waiting period for access to the Subversion Repository (which was about 18 hours). Definitely worth the potential exposure provided by having your plugin listed in the official directory.</p>
<blockquote><p>If you are a seasoned plugin developer, you already know how to hook it up at the WordPress Directory, but for those who don&rsquo;t, this <acronym title="Digging into WordPress">DiW</acronym> tutorial will show you everything you need to know.</p></blockquote>
<p><span id="more-1548"></span></p>
<h3>Why host your plugin at the WP Directory?</h3>
<p>Some of the benefits of hosting your plugin at the WordPress Plugin Directory:</p>
<ul>
<li>Track basic statistics regarding how many people are downloading and when</li>
<li>Provide a centralized location for users to leave comments and feedback</li>
<li>Get your plugin rated against the many other hosted WordPress plugins</li>
<li>And of course, give your plugin greater exposure to the WP community</li>
</ul>
<p>Further, it seems that plugins hosted at the official directory are perceived to be associated with a greater degree of &ldquo;trustworthiness.&rdquo; People <em>trust</em> WordPress, and they also trust the various resources (plugins, themes, etc.) made available to them through the <code>wordpress.org</code> website. Basically, if you&rsquo;re writing plugins for the WordPress community, you should be sharing them with as many people possible. The Plugin Directory does this exceedingly well.</p>
<p>&ldquo;Worth playing for?&rdquo; Let&rsquo;s look at a quick overview before digging into the specifics of getting your plugin added to the Directory..</p>
<h3>Overview</h3>
<p>To help get a sense of direction before getting started, consider this overview of events:</p>
<ul>
<li>Write and prepare your plugin</li>
<li>Prepare the readme.txt file</li>
<li>Sign up for access to the Subversion Repository</li>
<li>Wait for approval and <acronym title="Subversion (version control system)">SVN</acronym> access information</li>
<li>Use Subversion software to upload your plugin files</li>
<li>Wait a few minutes for the system to add your plugin to the Plugin Directory</li>
</ul>
<p>Of course, the big hurdle that many &ldquo;would-be&rdquo; contributors have is using the <acronym title="Subversion (version control system)">SVN</acronym>/Subversion system and software. To be honest, this was one of the reasons why I never bothered adding my other plugins, but now that I&rsquo;ve seen how easy it actually is (once you learn it), I will most likely add my other plugins as well (eventually).</p>
<h3>First steps</h3>
<p>First, get your plugin and files ready. You don&rsquo;t need to compress anything with <code>zip</code> or <code>tar</code> because the <acronym title="Subversion (version control system)">SVN</acronym> system will do that automatically for you based on the contents of your plugin. In my case, the plugin was Block Bad Queries, which contains the following two files:</p>
<ul>
<li><code>block-bad-queries.php</code></li>
<li><code>readme.txt</code></li>
</ul>
<p>The actual plugin file is the &ldquo;<code>block-bad-queries.php</code>&rdquo;. The &ldquo;<code>readme.txt</code> is the only other required file. If you have multiple plugin files, that&rsquo;s fine too, they will be uploaded and managed together during the subversion process.</p>
<p>For more information on getting things ready, check out <a href="http://codex.wordpress.org/Plugin_Submission_and_Promotion" title="Plugin Submission and Promotion">Plugin Submission and Promotion</a> at the Codex. A key factor in the process is a well-written <code>readme.txt</code> file, which we&rsquo;ll look at next..</p>
<h3>Pimp your readme.txt file</h3>
<p>I think having a well-prepared <code>readme.txt</code> file is one of the things that helped everything go smoothly for my first time out. Your plugin&rsquo;s <code>readme.txt</code> is used for the content of the various pages in a typical plugin listing:</p>
<ul>
<li>Plugin Name</li>
<li>Description</li>
<li>Installation</li>
<li>Faq</li>
<li>Screenshots</li>
<li>Other Notes</li>
<li>Changelog</li>
<li>Stats</li>
<li>Admin</li>
</ul>
<p>That&rsquo;s basically it. If your <code>readme.txt</code> contains each of these sections, you should be good to go. There are various details required for certain sections, such as the opening &ldquo;<code>Plugin</code>&nbsp;<code>Name</code>&rdquo; information, which requires the following specifics (using <acronym title="Block Bad Queries">BBQ</acronym> as an example):</p>
<pre><code>=== Plugin Name ===

Contributors: Jeff Starr
Plugin Name: Block Bad Queries
Plugin URI: http://perishablepress.com/press/2009/12/22/protect-wordpress-against-malicious-url-requests/
Tags: wp, protect, php, eval, malicious, url
Author URI: http://perishablepress.com/
Author: Perishable Press
Requires at least: 2.3
Tested up to: 2.9
Stable tag: 1.0
Version: 1.0 </code></pre>
<p>I think we&rsquo;re all familiar with this type of information &ndash; something similar is included at the top of virtually every plugin (and theme) in existence. In any case, this is the first part of a proper <code>readme.txt</code> file, as seen in the <a href="http://wordpress.org/extend/plugins/about/readme.txt">WordPress/bbPress plugin readme file standard</a>, which also contains details and further information about the various requirements.</p>
<p>So, to put all of this together and create your own <code>readme.txt</code> file, just copy &amp; paste the following template into a blank <code>.txt</code> file and flesh it out with your own details:</p>
<pre><code>=== Plugin Name ===

Contributors:      (plugin contributors)
Plugin Name:       (name of your plugin)
Plugin URI:        (web page for plugin)
Tags:              (tags for the plugin)
Author URI:        (plugin authors site)
Author:            (the plugin's author)
Donate link:       (a link for donating)
Requires at least: (minimum required WP) 
Tested up to:      (tested WP up to ver)
Stable tag:        (plugin's stable ver)
Version:           (plugins current ver)

== Description ==

== Installation ==

== Upgrade Notice ==

== Screenshots ==

== Changelog ==

== Frequently Asked Questions ==

== Donations ==</code></pre>
<p>Aside from wanting to put the &ldquo;Plugin Name&rdquo; section at the top of the file, these different sections can be rearranged in any order, but they all need to be present in order to adhere to WordPress guidelines and pass the <a href="http://wordpress.org/extend/plugins/about/validator/" title="Readme Validator">readme validation</a>. For more information on fleshing out each of these different sections, check out the <a href="http://wordpress.org/extend/plugins/about/readme.txt">standard readme.txt example</a>. Once you get everything pimped and ready, the readme validator will display the good news:</p>
<blockquote><p>Your readme.txt rocks. Seriously. Flying colors.</p></blockquote>
<p>If you don&rsquo;t see this message, you&rsquo;ll get a list of things that need fixed in order to pass validation. The validator is a great tool that makes it easy to put together a proper <code>readme.txt</code> file.</p>
<h4>A few notes on the readme file</h4>
<p>Here are a few notes that I found helpful while creating the <code>readme.txt</code> file:</p>
<ul>
<li>The readme file uses <a href="http://daringfireball.net/projects/markdown/syntax" title="Markdown">markdown</a> for marking up your info with links, lists and so on.</li>
<li>You may use <acronym title="PHP: Hypertext Preprocessor">PHP</acronym> in your readme content (escape with backticks: <code>`&lt;?php</code>&nbsp;<code>?&gt;`</code>)</li>
<li>Use asterisks for *emphasized text*</li>
<li>Use double asterisks for **strong text**</li>
</ul>
<p>As you can see, the <code>readme.txt</code> file is quite flexible, enabling you to customize your plugin&rsquo;s information as provided in the Plugin Repository.</p>
<h3>Prepare the plugin file</h3>
<p>After creating and testing your plugin, you need to give it a license. Here is what the WordPress Codex has to say about it:</p>
<ul>
<li>Your plugin must be <a href="http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses">GPLv2 Compatible</a>.</li>
<li>The plugin most not do anything illegal, or be morally offensive.</li>
<li>You have to actually use the <a href="http://subversion.tigris.org/">subversion</a> repository we give you in order for your plugin to show up on this site. The WordPress Plugins Directory is a hosting site, not a listing site.</li>
<li>The plugin must not embed external links on the public site (like a &ldquo;powered by&rdquo; link) without explicitly asking the user&rsquo;s permission.</li>
<li>If you don&rsquo;t specify a v2-compatible license, what you check in is explicitly GPLv2.</li>
</ul>
<p>Once you&rsquo;ve given your plugin the required license &#8212; either <strong>explicitly</strong> by <em>including</em> the license or <strong>implicitly</strong> by not including <em>any</em> license &#8212; you&rsquo;re ready to get hosted at the Repository. Take a few deep breaths and clear your mind..</p>
<h3>Sign up for access to the Plugin Repository</h3>
<p>Now with your plugin files ready to go, visit the <a href="http://wordpress.org/extend/plugins/add/">Sign-up page</a>, login to your account, and fill out the form with the following information:</p>
<ul>
<li>Plugin Name (required)</li>
<li>Plugin Description (required)</li>
<li>Plugin URL</li>
</ul>
<p>After submitting the form, be prepared to wait awhile to be approved access to the subversion repository. For my plugin, it took around 18 hours to receive a response. Just be patient, if everything looks good, someone will approve your request within a reasonably undefined amount of time. Eventually, you should receive an email with all the information you need to access the <a id="subversion" href="http://wordpress.org/extend/plugins/about/svn/">Subversion Repository</a>. This is where you will upload and store your plugin. The system will use the files and information included in the Subversion Repository to generate the actual web pages that appear in the <a href="http://wordpress.org/extend/plugins/" title="WordPress Plugin Directory">Plugin Directory</a> with all of the other plugins. It usually takes a few minutes for the system to create your plugin&rsquo;s entry, so be patient after uploading. Just as a general reference, I think I waited something like five or ten minutes before seeing my plugin listed in the Plugin Browser.</p>
<h3>Use Subversion software to upload your plugin files</h3>
<p>At this point, you&rsquo;ve been granted access to the <acronym title="Subversion (version control system)">SVN</acronym> repository and are ready to upload your files and call it done (until the next plugin update). To begin this task, familiarize yourself (if necessary) with the basics of <a href="http://ptahdunbar.com/how-to/subversion-demystified-using-wordpress/" title="Subversion Demystified using WordPress">using Subversion with WordPress</a>. </p>
<blockquote><p>There&rsquo;s a LOT to learn about Subversion, but don&rsquo;t let that stop you from making quick use of it to get the job done.</p></blockquote>
<h4>What is Subversion?</h4>
<p>Basically, Subversion is an open-source piece of software that people use to more easily manage files and directories as they change over time. The key thing about Subversion is that it enables you to restore previous versions of your data and understand how things have changed. This &ldquo;time-machine&rdquo; functionality is especially useful for managing things like continually changing source code, and makes managing thousands of plugins <em>much</em> easier.</p>
<h4>How do I use Subversion?</h4>
<p>To use Subversion, you&rsquo;ll need some software. Mac people get it pre-installed with Leopard, and Windows peeps can download the binary installer <a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91" title="Subversion Binary Downloads">here</a>. Keep in mind that, for either operating system, Subversion is something you run through either Terminal (Mac) or the Command Prompt (Win) as a series of commands. As you can imagine, there are a gazillion commands available, but we&rsquo;ll only be needing a select few for our purposes here.</p>
<h4>Please don&rsquo;t make me use the command line!</h4>
<p>If the thought of using the command line to run software makes your stomach turn, you can use Subversion through a graphical interface such as <a href="http://www.versionsapp.com/" title="Versions">Versions</a> for Mac, and/or<br />
<a href="http://tortoisesvn.tigris.org/" title="Tortoise">Tortoise</a> for Windows. I haven&rsquo;t used either of these apps, but they certainly <em>look</em> more inviting than the command prompt, which is what we&rsquo;re rolling with for this tutorial.</p>
<h4>How does it work?</h4>
<p>There are two sets of files we&rsquo;re working with: <strong>local files</strong> (on your computer) and <strong>remote files</strong> (on the server). For each set of files, we want the following directory structure (using my plugin as an example):</p>
<pre><code>root-folder/
	/trunk/
		block-bad-queries.php
		readme.txt
	/branches/
	/tags/</code></pre>
<p>To get started, we&rsquo;ll place our files into the <code>/trunk/</code> directory, and then in the future add new versions to either the <code>/branches/</code> directory (for <em>major</em> updates) or <code>/tags/</code> directory (for <em>minor</em> updates). </p>
<p>Once uploaded, your files are stored in the central plugin repository on WordPress servers. From the repository, anyone can <strong>check out</strong> a copy of your file(s), but <em>only you</em> (the plugin author) have the authority to <strong>check in</strong> new file(s). Using Subversion, any changes made to your local files are mirrored exactly on the server, and eventually reflected in your plugin pages in the WordPress.org plugin directory.</p>
<h4>Add your plugin to the Repository</h4>
<p>Now that we have our files ready and Terminal (or Command Prompt) open, let&rsquo;s wrap this up and upload our files to the Plugin Repository. Here&rsquo;s an overview of what we&rsquo;re going to do:</p>
<ol>
<li>Check out the blank repository (i.e., the empty directory structure)</li>
<li>Add your files to the local <code>/trunk/</code> directory on your computer</li>
<li>Update the repository with copies of your local files</li>
</ol>
<p>Here&rsquo;s how to do it with Mac Terminal, and it&rsquo;s very similar for Windows Command Prompt:</p>
<pre><code>$ mkdir my-local-dir
$ svn co http://svn.wp-plugins.org/your-plugin-name my-local-dir
$ cd my-local-dir/
my-local-dir/$ cp ~/my-plugin.php trunk/my-plugin.php
my-local-dir/$ cp ~/readme.txt trunk/readme.txt
my-local-dir/$ svn add trunk/*
my-local-dir/$ svn ci -m 'add some notes here'</code></pre>
<p>And here are the same commands with comments and returned messages:</p>
<pre><code># create a local folder for your copy of the repository

$ mkdir my-local-dir

# download the empty directory structure to your new folder

$ svn co http://svn.wp-plugins.org/your-plugin-name my-local-dir
&gt; A	my-local-dir/trunk
&gt; A	my-local-dir/branches
&gt; A	my-local-dir/tags
&gt; Checked out revision 11325.

# copy your plugin files to the local trunk directory

$ cd my-local-dir/
my-local-dir/$ cp ~/my-plugin.php trunk/my-plugin.php
my-local-dir/$ cp ~/readme.txt trunk/readme.txt

# register the new files with Subversion

my-local-dir/$ svn add trunk/*
&gt; A	trunk/my-plugin.php
&gt; A	trunk/readme.txt

# update the Repository with the new files

my-local-dir/$ svn ci -m 'add some notes here'
&gt; Adding	trunk/my-plugin.php
&gt; Adding	trunk/readme.txt
&gt; Transmitting file data ..
&gt; Committed revision 11326.

# All done!</code></pre>
<p>That may look like a mouthful, but it&rsquo;s actually only about seven commands, even fewer if you manually create the directory structure and add the local files yourself. You should also keep the following notes in mind if you are new to the whole &ldquo;command line&rdquo; thing:</p>
<ul>
<li>Any line prefixed with a pound sign <code>#</code> is a comment and should not be used as a command.</li>
<li>Lines beginning with a &rdquo;<code>&gt;</code>&rdquo; character indicate a response from the software and should not be used as a command.</li>
<li>All of the specific file and directory names need to be changed to match your own.</li>
<li>The &ldquo;<code>-m 'add some notes here'</code>&rdquo; in the last command is used to add notes for the event &#8212; they may be anything you wish (or none at all).</li>
<li>At the last step, you may be prompted for your username and password, which should be the same as used when logged into the WordPress.org site.</li>
</ul>
<p>After running those commands, your plugin will be in the Repository and ready for the system to automatically create your actual plugin pages as they will appear in the Plugin Directory. This usually takes some time, so grab a drink and kick back for around five to ten minutes. Eventually, you will see your plugin appear on the <a href="http://wordpress.org/extend/plugins/browse/new/" title="Newest WordPress Plugins">Newest Plugins</a> page, and then also at its dedicated page, which will be something like this:</p>
<p><code>http://wordpress.org/extend/plugins/your-new-plugin/</code></p>
<p>Once you get this far, you&rsquo;re golden. There are many other cool things you can do with Subversion to manage and update your plugin. To get started with updating and tagging, check out the <a href="http://wordpress.org/extend/plugins/about/svn/" title="How to Use Subversion">How to Use Subversion</a> in the Plugin Directory. And for even more information on the entire process of adding your plugins, check out the <a href="http://wordpress.org/extend/plugins/about/faq/" title="Developer FAQ">Plugin Developer FAQ</a>.</p>
<h3>Final thoughts..</h3>
<p>Overall, getting my first plugin hosted at the WordPress Plugin Directory was a great learning experience that will make it easy to add other plugins in the future. Hopefully the fruits of my labor will help you when adding your own plugins to the Directory. As always, feel free to chime in with suggestions, questions and concerns about any of the techniques described here. It would be great to hear more about using Subversion (tips, tricks, etc.).</p>
<p>Also, if you are interested, you can see the result of all this work by checking out the <a href="http://wordpress.org/extend/plugins/block-bad-queries/" title="WordPress Plugin: Block Bad Queries (BBQ)">Block Bad Queries (BBQ) Plugin at the Plugin Directory</a>. There&rsquo;s still a few details that need to be added/tweaked, but it&rsquo;s great just having it in there.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/03/add-plugin-to-wordpress-plugin-repository/">Permalink</a> | <a href="http://digwp.com/2010/03/add-plugin-to-wordpress-plugin-repository/#comments">12 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/03/add-plugin-to-wordpress-plugin-repository/&title=How to Add Your Plugin to the WordPress Plugin Directory">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a>, <a href="http://digwp.com/tag/svn/" rel="tag">svn</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/03/add-plugin-to-wordpress-plugin-repository/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Feature/Bury Comments</title>
		<link>http://digwp.com/2010/01/featurebury-comments/</link>
		<comments>http://digwp.com/2010/01/featurebury-comments/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:03:22 +0000</pubDate>
		<dc:creator>Chris Coyier</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1244</guid>
		<description><![CDATA[In my WordPress Wishes post, I mentioned something I thought would be cool: the ability to &#8220;feature&#8221; or &#8220;bury&#8221; comments. This would be very simple, just a few extra links when viewing the comment moderation list in the Admin area. The result would just be extra CSS class names applied when the comments list is [...]]]></description>
			<content:encoded><![CDATA[<p>In my <a href="http://digwp.com/2010/01/wordpress-wishes/">WordPress Wishes post</a>, I mentioned something I thought would be cool: the ability to &#8220;feature&#8221; or &#8220;bury&#8221; comments. This would be very simple, just a few extra links when viewing the comment moderation list in the Admin area. The result would just be extra CSS class names applied when the comments list is output. Utkarsh Kukreti came to the rescue! Here is his <a href="http://wpprogrammer.com/feature-comments-wordpress-plugin/">announcement post</a> and the <a href="http://wordpress.org/extend/plugins/feature-comments/">plugin in the repository.</a> </p>
<p><span id="more-1244"></span></p>
<p>I explained my thinking on all of this in a post on CSS-Tricks: <a href="http://css-tricks.com/curating-comments-threads/">Curating Comment Threads</a>. This has screenshots of how the plugin works, and my first exploration into using it.</p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/01/featurebury-comments/">Permalink</a> | <a href="http://digwp.com/2010/01/featurebury-comments/#comments">One comment</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/01/featurebury-comments/&title=Feature/Bury Comments">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/comments/" rel="tag">comments</a>, <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/01/featurebury-comments/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why All-In-One SEO Deactivates</title>
		<link>http://digwp.com/2010/01/why-all-in-one-seo-deactivates/</link>
		<comments>http://digwp.com/2010/01/why-all-in-one-seo-deactivates/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 15:31:08 +0000</pubDate>
		<dc:creator>Chris Coyier</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1213</guid>
		<description><![CDATA[In the past I&#8217;ve been pretty pissy about the All-In-One SEO plugin from Michael Torbert automatically deactivating itself after updates. My reasoning: If you update and forget to re-activate (somewhat hard to do since it reminds the shit out of you on every page of the admin), it could cause problems. We are forced to [...]]]></description>
			<content:encoded><![CDATA[<p>In the past I&#8217;ve been pretty pissy about the <a href="http://wordpress.org/extend/plugins/all-in-one-seo-pack/">All-In-One SEO plugin</a> from <a href="http://michaeltorbert.com/">Michael Torbert</a> automatically deactivating itself after updates. My reasoning:</p>
<ul>
<li>If you update and forget to re-activate (somewhat hard to do since it reminds the shit out of you on every page of the admin), it could cause problems.</li>
<li>We are forced to see Michael&#8217;s large promotional/donation blocks up in our faces above where we can reactivate. I&#8217;m all for plugin authors making as much money as they can, but this seemed to me a bit too far.</li>
<li>I really like the plugin and use it on all my sites and wish it was closer to my version of perfect.</li>
</ul>
<p>But Michael recently stopped by to explain his side, which is interesting, so I thought I&#8217;d update the record, as it were.</p>
<p><span id="more-1213"></span></p>
<p><a href="http://digwp.com/2009/10/rude-things-plugins-can-do/#comment-3005">Michael Torbert</a>:</p>
<blockquote><p>&#8230; a site complained that a new feature damaged their site&#8217;s search engine results placement. They finally admitted that they were incorrect in this assumption, and that the cause was something else unrelated to the plugin, but their original assessment was that a new feature hurt them.</p>
<p>From then on, any update which introduces new options (not just behind the scenes changes) require the user to reactivate the plugin from the settings page, to make sure that they can review the options.</p></blockquote>
<p>I can understand this line of thinking. Forcing the user to visit the options page may be the closest thing to getting them to think about the plugins options as is possible. </p>
<p>Michael is also aware of the potentially negative experience:</p>
<blockquote><p>I&#8217;m aware of how it looks, and I understand that it&#8217;s annoying for some users. I spent a lot of time thinking about it and consulted with a number of other people in the community when contemplating the decision about what to do.<br />
Unfortunately, in this case there was no way to make everyone happy, so I sided with ensuring that nobody could ever say (even if incorrectly as was the case) that new features introduced caused harmful effects to their sites SEO.</p></blockquote>
<h3>Perhaps a better way?</h3>
<p>Let&#8217;s say that the moment you decided to upgrade the plugin to a version with new features, the google bot decided to stroll by your site. The plugin is momentarily deactivated, so the google bot sees lots of differences. The canonical tag is gone, the meta tags are gone, the page title is different. Surely that isn&#8217;t good for SEO.</p>
<p>Perhaps this plugin could save the currently running version number in the wp_options table. Then when an upgrade is performed, it could update this but also save the <strong>previous</strong> version number. Then instead of deactivating itself, it could display a message (rather boldly, like the current message) which explains what is new with the plugin and things you should watch for. </p>
<hr />
<p><small>© 2010 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2010/01/why-all-in-one-seo-deactivates/">Permalink</a> | <a href="http://digwp.com/2010/01/why-all-in-one-seo-deactivates/#comments">26 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2010/01/why-all-in-one-seo-deactivates/&title=Why All-In-One SEO Deactivates">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a>, <a href="http://digwp.com/tag/seo/" rel="tag">SEO</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2010/01/why-all-in-one-seo-deactivates/feed/</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>How to Develop WordPress Themes Behind the Scenes</title>
		<link>http://digwp.com/2009/12/develop-themes-behind-the-scenes/</link>
		<comments>http://digwp.com/2009/12/develop-themes-behind-the-scenes/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 07:16:07 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Theme]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[theme-switch]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=1104</guid>
		<description><![CDATA[A reader recently asked about how to develop a theme on a live site such that: All visitors will see the current theme Only the designer will see the new theme All site plugins will work with the new theme Smooth transition between old and new theme at launch These are the main concerns, but [...]]]></description>
			<content:encoded><![CDATA[<p>A reader recently asked about how to develop a theme on a live site such that:</p>
<ul>
<li>All visitors will see the current theme</li>
<li>Only the designer will see the new theme</li>
<li>All site plugins will work with the new theme</li>
<li>Smooth transition between old and new theme at launch</li>
</ul>
<p>These are the main concerns, but there are a few other details that need addressed to ensure smooth theme development on a live site. Let&rsquo;s take a look at how to achieve these goals and effectively develop themes behind the scenes..</p>
<p><span id="more-1104"></span></p>
<h3>You need a plugin</h3>
<p>The easiest way to develop a new theme behind the scenes is to install a good theme-switcher plugin. There are plenty available:</p>
<ul>
<li><a href="http://wordpress.org/extend/plugins/theme-switcher/" title="Theme Switcher">Theme Switcher</a></li>
<li><a href="http://wordpress.org/extend/plugins/theme-switcher-reloaded/" title="Theme Switcher Reloaded">Theme Switcher Reloaded</a></li>
<li><a href="http://wordpress.org/extend/plugins/alternative-theme-switcher/" title="Alternative Theme Switcher">Alternative Theme Switcher</a></li>
<li><a href="http://wordpress.org/extend/plugins/theme-preview/" title="Theme Preview">Theme Preview</a>
<li><a href="http://wordpress.org/extend/plugins/theme-test-drive/" title="Theme Test Drive">Theme Test Drive</a></li>
<li><a href="http://wordpress.org/extend/plugins/nkthemeswitch/" title="Theme Switch and Preview">NK Theme Switch</a></li>
</ul>
<p>Any of these plugins will work fine for the purposes of working with multiple themes on your site. If you also plan on enabling your visitors to switch themes, I would have to recommend the newer NK Theme Switch plugin. NK Theme Switch does everything the other plugins can do, but with the added bonus that it redirects users back to the page from which they came after switching themes. The other two plugins switch themes, but the user is always redirected back to the home page after the theme switch. </p>
<p>Note that, for the different theme-switcher plugins, the <acronym title="Uniform Resource Locator">URL</acronym>s used when switching themes include different query-string parameters that are similar but not interchangeable. Once you implement a theme switcher, replacing it with a different plugin is going to be difficult.</p>
<p>In any case, once you have your theme-switcher plugin of choice activated, you&rsquo;re going to need to know how to actually switch the themes..</p>
<h3>Switching themes</h3>
<p>Different plugins involve different methods of switching to a different theme. If you are using NK Theme Switch, you can select and activate your alternate (development) theme from within the WordPress Admin. This is the <em>easiest</em> way to do it. If you are using one of the other theme-switching plugins, activating the alternate theme for your browser is as easy as entering a specific <acronym title="Uniform Resource Locator">URL</acronym> into the address bar. These theme-switching <acronym title="Uniform Resource Locator">URL</acronym>s look similar for either of the first two plugins:</p>
<pre><code>http://domain.tld/index.php?wptheme=ThemeName</code></pre>
<p>For example, here is the <acronym title="Uniform Resource Locator">URL</acronym> used to switch to one of my favorite themes at <a href="http://perishablepress.com/" title="Perishable Press: Digital Design and Dialogue">Perishable Press</a>:</p>
<pre><code>http://perishablepress.com/press/index.php?wptheme=Perishable</code></pre>
<p>The syntax here is straightforward &#8212; the only thing that needs to be changed is the theme name, which in this case is &ldquo;Perishable&rdquo;. When developing a new theme for Perishable Press, I simply jot down the theme-switch <acronym title="Uniform Resource Locator">URL</acronym> for both the new theme and the active default theme. This makes jumping back and forth very easy. Of course, the general format of these <acronym title="Uniform Resource Locator">URL</acronym>s will vary depending on the particular theme-switching plugin that you use.</p>
<p>Another option for switching between current and alternate themes is to actually include the theme-switching links and/or dropdown menu right there on the theme pages themselves. For example, including the theme-switch dropdown menu in the footer of all your themes is a great way to speed up and simplify the development process. But be advised, unless you explicitly <em>exclude</em> your new theme from the theme-switch menu, it will be available for all of your visitors to see and activate. The other method of just using the <acronym title="Uniform Resource Locator">URL</acronym> directly is a good way to ensure privacy.</p>
<p>Now that you are setup and easily switching between themes, there are a few other points to consider..</p>
<h3>Your new theme is just another theme</h3>
<p>This may sound strange, but there is nothing special about your new theme &#8212; it&rsquo;s treated by WordPress as any other theme in your &ldquo;<code>themes</code>&rdquo; directory. All of the requirements of the default theme apply:</p>
<ul>
<li>Your new theme needs a properly configured <code>style.css</code> file</li>
<li>Your new theme needs a working <code>index.php</code> file</li>
</ul>
<p>Assuming your new theme meets these basic requirements, WordPress will recognize your theme as such and display it when activated (either through the Admin or via theme-switch plugin). Incidentally, the name of your theme is specified via the <code>style.css</code> file. The &ldquo;<code>Theme Name</code>&rdquo; that is listed here will be the same one used in your theme-switching <acronym title="Uniform Resource Locator">URL</acronym>s.</p>
<p>Once you get the basics of your new theme established, use your theme-switching plugin to activate it locally in your browser. Form there, you can rock the design however you want, exactly as you would do when starting from a fresh installation of WordPress. While you are working on your new theme, your visitors will still be seeing your default active theme, which is whatever you specify in the WordPress Admin. This is why the theme-switch development method works so well.</p>
<h3>Pages, plugins, and custom functions</h3>
<p>Here are a few more little things that will help you when developing your themes behind the scenes..</p>
<dl>
<dt>Plugins affect <em>all</em> themes</dt>
<dd>Even when your theme is not set as the current default, it will still be affected by all of the plugins installed on your site. This is one of the benefits of using plugins over custom functions..</dd>
<dt>Custom functions only affect the theme being used</dt>
<dd>In contrast to plugins, custom functions (i.e., functions placed in your theme&rsquo;s <code>functions.php</code> file) only affect the current theme being viewed. If you seem to missing some functionality in your &ldquo;behind-the-scenes&rdquo; theme, make sure that you have properly transferred any required custom functions.</dd>
<dt>Page templates will confuse you</dt>
<dd>This happens to everyone: you are working behind the scenes on a new theme and you can&rsquo;t seem to get a custom page template to appear in the WordPress Admin. This is because the page editor only shows the templates available to the current default active theme (i.e., the one that <em>everyone</em> sees). To work around this, you can either upload a copy of the custom page template to the active theme, or temporarily switch the default active theme to your behind-the-scenes theme. Personally, I use the former method and just delete the page template if it&rsquo;s not needed in the default theme.</dd>
</dl>
<p>And last but not least..</p>
<h3>Prepare for launch!</h3>
<p>Once you have your new theme pimped out and ready to go, simply change your default active theme in the WordPress Admin to launch it for the world see. That&rsquo;s all there is to it!&nbsp;:)</p>
<hr />
<p><small>© 2009 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2009/12/develop-themes-behind-the-scenes/">Permalink</a> | <a href="http://digwp.com/2009/12/develop-themes-behind-the-scenes/#comments">27 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2009/12/develop-themes-behind-the-scenes/&title=How to Develop WordPress Themes Behind the Scenes">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a>, <a href="http://digwp.com/tag/theme-switch/" rel="tag">theme-switch</a>, <a href="http://digwp.com/tag/tips/" rel="tag">tips</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2009/12/develop-themes-behind-the-scenes/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Feed Count Plugin</title>
		<link>http://digwp.com/plugins/feedcount.zip</link>
		<comments>http://digwp.com/2009/10/feed-count-plugin/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 01:59:34 +0000</pubDate>
		<dc:creator>Jeff Starr</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=840</guid>
		<description><![CDATA[One of the easiest ways to display your FeedBurner subscriber count number in plain text is to use the Feed Count plugin by Francesco Mapelli. I have been using this plugin at Perishable Press for a long time, and it has always been great. Unfortunately, Francesco&#8217;s site seems to be suffering from malicious behavior these [...]]]></description>
			<content:encoded><![CDATA[<p>One of the easiest ways to display your FeedBurner subscriber count number in plain text is to use the Feed Count plugin by Francesco Mapelli. I have been using this plugin at Perishable Press for a long time, and it has always been great. Unfortunately, Francesco&#8217;s site seems to be suffering from malicious behavior these days, with tons of spam comments, weird files that are automatically downloaded to your computer, and even one of those scary warnings from Google: &#8220;Reported Attack Site,&#8221; or whatever it says.</p>
<p>In any case, the Feed Count plugin is too awesome to let disappear into the ether, so it will be hosted here at Digging into WordPress until Francesco&#8217;s site checks into a rehab center and cleans itself up. Hopefully that will be sometime soon. In the meantime, to download a squeaky-clean copy of the Feed Count plugin, simply click on the title of this post.</p>
<p><small><a href="http://digwp.com/plugins/feedcount.zip" title="Direct link to featured article">Direct Link to Article</a> &#8212; <a href="http://digwp.com/2009/10/feed-count-plugin/" title="Permalink to post on DiW">Permalink on DiW</a></small></p><hr />
<p><small>© 2009 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2009/10/feed-count-plugin/">Permalink</a> | <a href="http://digwp.com/2009/10/feed-count-plugin/#comments">No comment</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2009/10/feed-count-plugin/&title=Feed Count Plugin">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2009/10/feed-count-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ideas for Plugins I&#8217;m Too Lazy To Write</title>
		<link>http://digwp.com/2009/10/ideas-for-plugins/</link>
		<comments>http://digwp.com/2009/10/ideas-for-plugins/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 14:36:53 +0000</pubDate>
		<dc:creator>Chris Coyier</dc:creator>
				<category><![CDATA[Plugins]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[title]]></category>

		<guid isPermaLink="false">http://digwp.com/?p=629</guid>
		<description><![CDATA[&#8230; or slightly more accurately, that I don&#8217;t know how to write =) Subtitle I think it would be a cool format for a blog to have a title and a subtitle for every single Post. You could easily do it with Custom Fields, but this plugin would alter the Admin screen for writing posts [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; or slightly more accurately, that I don&#8217;t know how to write =)</p>
<h3>Subtitle</h3>
<p>I think it would be a cool format for a blog to have a title <strong>and</strong> a subtitle for every single Post. You could easily do it with Custom Fields, but this plugin would alter the Admin screen for writing posts to insert an additional text area underneath the title and above the content area. </p>
<p><img src="http://digwp.com/wp-content/blog-images/subtitle.png" width="590" height="268" alt="" title="" /></p>
<p>Then there would be a special function for displaying the subtitle like:</p>
<pre><code>&lt;?php the_subtitle(); ?&gt;</code></pre>
<p><span id="more-629"></span></p>
<p>&nbsp;</p>
<h3>Rich Text Titles</h3>
<p>Speaking of titles, it would be cool if we were able to use HTML tags in titles sometimes. For example, just being able to add &lt;em&gt; tags to a word in the title would be cool, but that causes problems currently. It might display OK on your site, but it may cause validation problems (since the tags will show up inside title attributes and such) and may come across screwed up in feed readers. This plugin would alter the the_title() function to automatically strip the HTML tags, but create a new function like the_title_html() that would retain the tags for display anywhere you want to make sure they persist. This would ensure the RSS feed remains unscathed.</p>
<p><img src="http://digwp.com/wp-content/blog-images/html-title.png" width="590" height="116" alt="" title="" /></p>
<p>&nbsp;</p>
<h3>Plugin Notes</h3>
<p>Ever look through your list of plugins and forget just exactly what one of them does? I know they have descriptions next to them, but that doesn&#8217;t always speak to <strong>exactly what <em>you</em> are using it for</strong> and why. This plugin would just put a text field in each plugin field you could type some notes in there, theoretically to keep information about why and how you are using this plugin.</p>
<p><img src="http://digwp.com/wp-content/blog-images/plugin-notes.png" width="590" height="402" alt="" title="" /></p>
<p>You&#8217;d probably have to also add buttons/links for adding &#038; removing notes.</p>
<p>&nbsp;</p>
<h3>Notify All Admins</h3>
<p>On this blog we have two admins: me and Jeff. When I write and publish a post, and someone comments, I get an email about it (but Jeff doesn&#8217;t). When Jeff writes and publishes a post, and someone comments, he gets an email about it (but I don&#8217;t). Since this is both of our sites, I wouldn&#8217;t mind getting ALL comment notifications. But I&#8217;m not sure if Jeff feels the same way. So this plugin would just add an extra user option (only active for full site admins):</p>
<p><img src="http://digwp.com/wp-content/blog-images/comment-notification.png" width="590" height="223" alt="" title="" /></p>
<p>&nbsp;</p>
<h3>Title Un-Widower</h3>
<p>There is a pretty robust plugin called <a href="http://wordpress.org/extend/plugins/wp-typography/">WP-Typography</a> that covers widows in post titles. I give it props, but my personal preference is to handle 90% of what it does on my own. What I can&#8217;t do on my own is add non-breaking spaces to the last two words in a post title (one of the things it does). I currently <a href="http://css-tricks.com/preventing-widows-in-post-titles/">do this with jQuery</a> on some sites which is OK, but would be better done with PHP so it happens <strong>before</strong> the page renders no matter what.</p>
<p><img src="http://digwp.com/wp-content/blog-images/post-un-widower.png" width="523" height="200" alt="" title="" /></p>
<p>&nbsp;</p>
<p>So if there are already plugins out there that do this stuff, I apologize. I admit I didn&#8217;t launch a giant manhunt to find existing plugins that did these things.</p>
<hr />
<p><small>© 2009 <a href="http://digwp.com">Digging into WordPress</a> | <a href="http://digwp.com/2009/10/ideas-for-plugins/">Permalink</a> | <a href="http://digwp.com/2009/10/ideas-for-plugins/#comments">27 comments</a> | Add to <a href="http://del.icio.us/post?url=http://digwp.com/2009/10/ideas-for-plugins/&title=Ideas for Plugins I&#8217;m Too Lazy To Write">del.icio.us</a> | Post tags: <a href="http://digwp.com/tag/hacking/" rel="tag">hacking</a>, <a href="http://digwp.com/tag/plugin/" rel="tag">plugin</a>, <a href="http://digwp.com/tag/title/" rel="tag">title</a><br/></small></p>]]></content:encoded>
			<wfw:commentRss>http://digwp.com/2009/10/ideas-for-plugins/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
	</channel>
</rss>

