GSoC Proposal: Specialized Theme for Ideas & Feedback

The current WordPress Idea Forum is a useful and necessary way for the project to receive feedback and accept feature requests from the WordPress user-base. However, there are certain features that could be improved and refined to make the forum even more effective. Just as P2 impacted Automattic positively by allowing instant collaboration on posts and topics, I believe a new specialized “ideas” theme would foster user-base collaboration on ideas in the Idea Forum.

Project Proposal

My Google Summer of Code proposal is to write a highly specialized WordPress theme package that would create a more effective means for enabling an “ideas forum” or an “ideas site.” The theme package would certainly offer the functionality of the current site, but would also offer a number of specific improvements on what is currently implemented at

The specialized theme package could potentially be used to power the WordPress Ideas forum once the Summer of Code completes. However, as indicated, the main scope of this project proposal is to release an open source “idea forum” theme with significant enhancements in functionality over what is currently available for WordPress users. The specialized theme package would include a feature set similar to those of Ubuntu’s Brainstorm (, SlinkSet (, UserVoice ( and Dell’s IdeaStorm (

The main rationale for delivering this project as a WordPress theme package is that it could serve as a means to quickly acquire, test, and refine an enhanced feature set that could eventually be integrated with a new official WordPress Idea Forum. Some of the useful features that could be included in the Idea Forum by using WordPress as a base are the ability to assign multiple categories to an idea, threaded comments, the use of post status indicators to visually separate closed and open ideas, and so on.

While a number of new features can be supported by using a WordPress base, the following new features would be specifically included as part of the proposed theme:

Promote/Demote System

The theme would implement a promote/demote system for voting on ideas on the front-end. Users would click a “thumbs up” icon to show their support for a specific idea thread or a “thumbs down” icon if they disapprove or disagree with a thread. This would be a +1, -1 system.

Visual Posting Editor + Attachments

Not everyone that uses WordPress knows HTML. A visual editor such as the one included with WordPress would make it easier for some users to add formatting to their idea posts. Only tags such as the ones permitted in posts now would be allowed. The editor would degrade if JavaScript was not enabled. The posting screen would also allow users to post screenshots with their postings, for instance if they wanted to propose a UI screen or give a visual illustration of their idea.

Improved Comments System (with Solutions System)

A new comments system would be included in the theme that would allow for two types of comments:

  1. A normal comment giving general feedback on the idea or proposing additional ideas. This would be plain text with perhaps some minimal formatting or links.
  2. A specific solution to an idea, which would be displayed above the normal comments. See Ubuntu BrainStorm for an example.
    • A solution comment would allow attachments and would have the capacity to be voted up or down just like the main idea.
    • An example use: A user suggests better export/import functionality with a couple of feature ideas. A second user votes the idea up and has a specific solution in mind. Together they mock up a screen and post it as a solution for the idea. Other users can join in and vote this solution up and down, or post their own solutions.

Integration with Other Systems

Once an idea reaches a certain threshold (e.g., amount of feedback, number of solutions proposed, volume of comments, etc.) there should be a way to automatically generate some form of action, such as a Trac ticket. My proposal is to create a hook or filter and allow users to hook into their own action/ticket systems. These actions should only be available to certain users, e.g., moderators.

I will create an example plugin to accompany the theme that makes use of a filter to link with Trac installs. The plugin would allow a moderator to easily create a Trac ticket with a link back to the idea that instigated it. The Trac plugin would also allow the selection of one of the proposed solutions. The proposed solution would become the first comment on the generated Trac ticket.

Improved Reporting Features

Instead of replying (and bumping a topic) and applying the tag “modlook,” users will be able to report a topic and moderators will be able to see it in a new report center.

The report system will allow moderators to see why a specific idea needs to be monitored or acted upon (spam, lots of fighting, etc.) and quickly take action on the idea. Craigslist-type reporting features are one example of a potential implementation.

Popularity System

The theme would take into account the number of up votes, comments, solutions and views for generating a consolidated popularity score. Also, if an idea is linked to in a blog (track-back) then its popularity will increase. The ideas with the highest popularity score would be submitted to be shown in a “popular” section and on the home page of the ideas section.

A hook will be available to add new features to the popularity metric. An example plugin using retweets as a popularity measurement will be included as part of the project.

Official Summary of Resolution

The implementation of a custom field or post type would provide a feature that would allow an official summary of the resolution of an idea thread to be posted. For example, a moderator of would be able to use such a feature to generate a generic “this feature is better left to plugins” message and then plug in the applicable links and post the message as an official verdict.

Improved Search for Ideas

The default WordPress search can be messy for a popular idea site with a lot of idea listings. A special bundled version of my Search API plugin ( would be integrated with the theme to enable better filtering and display of results.

New Ideas Homepage

The theme would create a new, fresh home page for displaying ideas. The page would boast a cleaner and fuller presentation of ideas, including descriptions instead of just titles. Both new ideas and popular ideas would be shown. Alternative ways of browsing ideas would be included, such as tag clouds. Work would be integrated with the WordPress UI team to ensure a logical layout.

Posting Limits

A feature would be added to limit the number of open ideas that a user could have. The limit could be changed by the administrator in the WordPress back-end or disabled altogether. The reason for including this setting is to constrain over-posters and encourage them to think about the feedback they are submitting. Once one of their open ideas is closed, over limit users would be allowed to post another idea. This feature could also potentially cut down on spam issues.

Companion Plugin: Dashboard Widget

A small companion plugin would be created to add a new widget to the WordPress Admin Dashboard. The widget would allow for the quick posting of ideas from within WordPress itself.

Research Completed

  • Posted the proposal March 21st on the wp-hackers mailing list (
    • Jeremy Clarke posted some feedback and ideas. One of the feature suggestions was email updates, which we would receive as a benefit from switching to WordPress. He also suggested a working favorites feature.
    • Stats Suscov posted about the current ideas forum running on bbPress.
    • Scribu posted a response to one of Jeremy Clarke’s ideas about email notification and stated that the dev version of bbPress will soon have email notifications.
    • Nacin contacted me off list about contacting Jane.
  • Researched and compared feature sets of various related products such as Ubuntu’s Brainstorm (, SlinkSet (, UserVoice ( and Dell’s IdeaStorm (
  • Sent the proposal to Jane Wells on March 21st and received some feedback about my ideas, specifically about deciding between implementing the project as a set of bbPress plugins or as a specialized theme for WordPress. Further discussion and chats took place about features, scope, etc. once it was decided that a WordPress theme was the best implementation route.
  • Presented the idea in the April 3rd GSoC chat and received +1’s /encouragement from some of the mentors present.


The final project outcome would be a specialized WordPress theme with the features detailed above that would be released to the public.

Once the project is completed the code could be used as a replacement for the current WordPress Ideas Forum.


I see this project being very successful and reaching completion, and I don’t foresee any significant challenges apart from deciding on a final feature set with my mentor(s).

Having said that, I will follow the “release early and release often” ideal so that my work is available in case something prevents the project from being completed as planned.

Potential Mentor(s):

Jane Wells. We have already discussed features, scope, and the goals of the project in general. We will also both be attending WordCamp Chicago in June and may be able to talk about the project in person. states that Jane could be the primary mentor for UX/interaction modeling, and an additional mentor could be identified for code reviews and feedback.


First Core Contribution

This is minor in the overall scheme of WordPress development, but I have had my first patch/contribution committed to the WordPress core! It’s the addition of a function called get_search_link that will allow template authors/developers to generate a link to either the current search or to a new search if a parameter is passed to it.

The ticket history & patches can be viewed in the the following trac ticket: #10552


If you are on a search page (?s=query or /search/query/) then you do not need to pass a parameter and the function will take the current query string. you can use it like so:

get_search_link( );

If you need to link or start a new search you can pass it a parameter:

get_search_link('new search');


sirzooro opened a ticket 7 months ago requesting a new get_search_link function and proposed some code. This was during the time of the 2.9 feature freeze so the ticket was punted to the 3.0 release.

I wanted to help out during the feature freeze but didn’t have a lot of time in the last week to contribute so I searched for some tickets that needed testing or needed a patch that I would be able to handle. I found the get_search_link ticket and thought it was a good idea (it also goes with some of the new search functionality in 3.0  -more on this later) to get it added to core. We already had get_search_feed_link and a comments search feed function after all.

The code needed a little updating to be used in 3.0 so I submitted a patch and after some back and forth from dd32 the patch was fixed up and submitted a second time.

Late last night the change was finally committed to core.

Closing Comments

It’s exciting to see (even with some minor bit of code) the collaboration that happens within WordPress and open source software. Anyone can jump in there and work with other developers to get a feature added.

Although the feature freeze for 3.0 hits tomorrow it  has really added to my interesting in helping with the WordPress moment and I hope to contribute big fixes and help out on the support/documentation side of things in the next few weeks.

Creating a Feeds Page

In this short guide we will create a new page that lists the feeds available on a WordPress blog. It’s a simple process and can be a handy overview of what data your site offers.

Step One: Creating a Feeds Template

We will need a template which dynamically outputs our feeds. The easiest way to do this to fit in with the theme you have installed is to make a copy of the page.php template and name it something like feeds.php

Next we will need to give the new template a label. Look for the following snippet of code or something similar at the top and change the label to “Feeds Page”. If you do not see it go ahead and add this.

Template Name: Feeds Page

Next we will want to remove the code from this template that generates the page. We will replace it with the code that displays links to the feeds. Remove everything from the start of the WordPress loop to the end:


<?php if (have_posts()) : while (have_posts()) : the_post(); ?>


<?php endwhile; endif; ?>>

including the edit_post_link function call.

Now we will want to add in some code to display the feeds. I’ve created some code to get us started which can be demoed on my personal blog’s feed page.

The code is

<h2>Global Feeds</h2>

<li><a href="<?php bloginfo('rss2_url'); ?>" title="<?php _e('Latest Posts (RSS)'); ?>"><?php _e('<abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>
<li><a href="<?php bloginfo('atom_url'); ?>" title="<?php _e('Latest Posts (Atom)'); ?>"><?php _e('Atom'); ?></a></li>
<li><a href="<?php bloginfo('comments_rss2_url'); ?>" title="<?php _e('Latest Comments (RSS)'); ?>"><?php _e('Comments <abbr title="Really Simple Syndication">RSS</abbr>'); ?></a></li>

<h2>Feeds by Category</h2>

<?php wp_list_categories('orderby=name&show_count=1&feed=RSS&title_li='); ?>

The first few lines simply link to the standard feeds: a feed of the latest posts in RSS format, a feed of the posts in ATOM format and a feed of latest comments in RSS format.

The last few lines (wp_list_categories) output some links to the feeds of the categories you have been posting in. You can edit the above code to fit your needs. For example you can set show_count to 0 to remove the amount of posts after the RSS link, or change “RSS” to say “Feed” instead or you can remove the listing of category feeds all together.

The hard part is now over. We need to let WordPress know we want a specific page for this template. We do this by creating a new page and setting the page template to use our new feeds template.

Step Two: Creating a Page

Login to the admin control panel and navigate to “Pages” and “Add New”. Name the page “Feeds” or something similar. Leave the content blank and then look to the right for “Template” under the attributes box. Click the dropdown and select our new template.

Once you publish the page and click the view button a beautiful new feed template should be displayed.


That’s it! Enjoy! This method can be adapted for other dynamic pages you may want to create and is employed by things like a custom archives page or a new dynamic home page. Let me know if this tutorial was useful or if you are using it on your own blog!

wp_list_categories('orderby=name&show_count=1&feed=RSS'); ?>W