Trac
An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.
An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.
Internet Relay Chat, a network where users can have conversations online. IRC channels are used widely by open source projects and by WordPress. The primary WordPress channels are #wordpress and #wordpress-dev, on irc.freenode.net.
The plugin directory’s licensing guidelines have been updated. The guidelines will now allow code that is licensed under (or compatible with) version 3 of the GPL.
The guidelines still encourage use of “GPLv2 or later,” the same license as WordPress. However, we understand that many open source libraries use other licenses that are nonetheless compatible, such as GPLv2 only, GPLv3, and Apache 2.0.
Now may be a good time for plugin authors to review their plugins to ensure a license is specified. You can add License and License URI headers to readme.txt and the plugin’s headers. (You may also wish to include a copying permission statement.) For example:
License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html
You can see this used in the sample readme.txt.
This change brings the guidelines in line with the themes directory, which has for some time accepted GPLv3-compatible code. (Probably a good time to note that Creative Commons licenses are still incompatible with the GPL, and the theme and plugin directories.)
It would be nice to have a list with (in)compatible licenses for users which aren’t familiar with this topic.
Since it’s also a problem if your plugin is GPL but your are using an external lib which is incompatible and you didn’t know that.
Indeed. The guidelines link to GNU’s compatible licenses list: http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses.
Do you recommend still packaging a license.txt with plugins, or is the link in readme.txt sufficient?
It’s good practice to include a license.txt or COPYING file. At the very least, you should probably include the copying permission statement, which would state, “You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.” At worst, as long as it is specified somewhere in the readme or code, at least people know what your intent is.
And, if it is in the readme, we will be able to show it on your plugin’s page in the future.
I used the readme validator twice today. it worked earlier this afternoon then failed this evening. I was expecting some explanation would surface eventually. Currently the validator has trouble with the License: lines – sometimes suggesting that the description is too long as well
I’ve seen the same issue with the readme. Adding in the license lines gets it pushed into the Desc.
I tend to use the copying permission, with “This file is part of PLUGINNAME, a plugin for WordPress.” and then saying the license should have come with WP. But then again I release GPL2.
I pushed some changes earlier to fix some issues with the validator for the License lines. Can you still reproduce?
@Nacin: Yes. http://wordpress.org/extend/plugins/wordpress-move/
It seems to add now the License URL to the short description word counter…
Some plugins with a real short description work correctly, some with a longer like the mentioned “WordPress Move” work not.
I’d like to see this fixed, as the update with the 2 new license short tags in the header is really helpful – especially when this is displayed on the plugin page on .org!
Another suggestion for the short description: What about taking another short tag like:
Short Description: Here goes it…
or:
Intro: Here goes it…
Seems to be a bit more self-explaining as a lot of plugin authors still mix it all up and use the same – long – description everywhere making it less readable for users.
Just my 2 cents.
Thanks for all your hard work with repo – much appreciated! You guys really ROCK!!
-Dave
This was fixed yesterday, but a few plugins had pages generated before then. I went through and re-generated the data for the 12 plugins affected. Should be all set.
The readme standard rocks again.
thanks, now I have more work ensuring all my source files have both Copyright AND (currently missing from some) a statement of copying permission, saying that the program is distributed under the terms of the GNU General Public License.
The teams and status document has been updated to reflect current cycles. Yesterday’s dev meeting focused on identifying issues pertaining to blockers and resources, and whether any adjustments or corrections needed to be made, across all teams. As I didn’t keep a general summary, you may find the log is here.
I did take notes on who needs resources from whom:
And there may be a few others I didn’t catch. Ideally this will all happen before our meeting next Wednesday.
Two teams were added: @georgestephanis and Zach Abernathy (thezman84) working on tablets, and @aaronjorbin working with Tom Auger (tomauger) on favicons. I have been communicating with both teams to help get things off the ground.
If you want to get involved, there are 198 open tickets on report 5, many of which fall under no team. If they do, find the team during office hours or contribute directly to the ticket, as many have done.
Next meeting is 2/22 at 2100 UTC.
Per Jane’s request in the dev chat I posted a clearer picture of what the Twenty Twelve team is working on: http://wpdevel.wordpress.com/2012/02/14/team-update-twenty-twelve-2/#comment-38415
While we try to be proactive in preventing security problems, we do not assume they’ll never come up. If you believe you’ve found a security problem in a release of WordPress please see the Security FAQ for information on how to report the problem.
It is standard practice to notify the vendor (the WordPress security team, in this case) of a security problem before publicizing so a fix can be prepared and public damage due to the vulnerability minimized.
There are many steps in the process of reporting and resolving a bug in WordPress. Here is an overview:
With large projects like WordPress, so many users report bugs that there’s a good chance your bug has already been reported. Because of this, it’s very important to check to be sure it’s not already in the system before you submit it. If you are new to reporting bugs in WordPress, it is also a good idea to discuss the issue with more experienced developers before reporting it.
1. Make sure the bug is actually caused by WordPress core.
Just because an error message points to a core file, doesn’t mean that’s where the problem is. You may want to use a plugin like Debug Bar to track down the problem. A simple script like this debugging file could help you see where exactly the error is coming from. (You can place this file in your wp-content/mu-plugins directory; create it if it doesn’t exist.)
Another key strategy is to try and replicate the bug in a fresh WordPress install with no extra plugins or themes. While this may not always be possible, if you can find it in a fresh install, the issue is much more likely to be in core.
2. Search for your bug or enhancement request.
3. Consider discussing a possible bug before reporting it.
Trac is the name of the offcial WordPress bug tracker. It uses the open source bug tracking software Trac, by Edgewall Software. For more on Trac, see The Bug Tracker (Trac). To create a good bug report:
Your involvement doesn’t end after you’ve submitted a ticket. Developers may need more information as they review the ticket (and may specifically request more information from you by tagging the ticket with reporter-feedback).
You can also help by verifying that proposed fixes solve the problem you were experiencing. The processing of your bug may require your participation, so please be willing and prepared to aid the developers in resolving the issue. If you’d like to help fix the bug, see the section on Fixing Bugs.
You will be automatically emailed when your tickets are updated if you’ve entered your email address in your Trac preferences.
Trac is an open source project that serves as a bug tracker and project management tool for WordPress. Using Trac, developers can browse source code history as well as manage bug reports and feature development.
Tickets are used for both bug reports and feature development. Tickets, which may be created by anyone (it requires a WordPress.org account) are assigned numerous properties that provide a snapshot of the status of the ticket.
There is certainly some overlap among these five resolutions. It is not an exact science.
Individuals also have numerous roles:
New tickets are assigned to the Awaiting Review milestone. Upon initial review, it may be recommended for closure or require more feedback from the reporter or a core developer. Keywords often used here are 2nd-opinion, close, reporter-feedback, and dev-feedback.
It may also be moved to a milestone by a committer or trusted core contributor:
Tickets are punted when they are moved out of a minor or major release milestone to a future milestone. This generally happens at different intervals in the cycle to lower priority tickets. Some tickets are individually deemed as too complex or out of scope and are therefore moved.
This is great. I’m very familiar with issue tracking/pm systems like trac, and even thought I dig through trac all the time to see if issues I’m dealing with are known, I’ve only opened a couple of tickets of my own – but each time I have I’ve felt completely lost as to how to fill them out, or if I even should be touching some of them.
This, or something like this should be linked to directly from the form for opening tickets. Maybe its in there somewhere and I just missed it. Either way…
Thanks for this, it really clears things up.
WordPress Trac: This is our bug tracker and project management tool, where the code happens. We track bugs, enhancements, and tasks here. SVN actions are deeply integrated into Trac, including creating patches, and commits by core developers. Trac is for discussing code. Philosophical issues and questions over implementation of a potential future feature do not belong on Trac. Trac is located at https://core.trac.wordpress.org/.
WordPress SVN: The Subversion code repository is where the code “lives”, and is located at http://core.svn.wordpress.org/.
IRC: The #wordpress-dev channel on irc.freenode.net is our place for real-time discussion. It primarily serves as the venue for our weekly developer meeting. The channel is public, but the majority of chatter, especially during our weekly project meeting, comes from core contributors. Often, a conversation for a Trac ticket will be pulled into IRC, with the consensus later posted to the ticket. Bugs and questions of implementation will often be hashed out in IRC before ending up on Trac. Many contributors idle here. The channel is logged; you can read the logs at http://irclogs.wordpress.org/.
WordPress Blog: The WordPress Blog is a source of official announcements and news for the users of WordPress. The core team uses this blog to announce releases and initiatives. The blog feed appears in the dashboard of WordPress installs. The WordPress blog is located at http://wordpress.org/news/.
Development Blog (make/core): Sometimes referred to as “wpdevel” for its original location of http://wpdevel.wordpress.com/, the make/core blog leverages P2 for conversation and announcements that are not code (this is Trac), real time (this is IRC), or appeal to the user base (main blog). Located on the make.wordpress.org network as http://make.wordpress.org/core/, along with several other blogs:
Mailing Lists: WordPress leverages numerous mailing lists like most open source projects, but as a secondary tool. Patches are posted to Trac, rather than to any mailing list, and discussions on the mailing lists are often better suited in another venue. For example, wp-hackers was used for core development discussions years ago, but now these discussions will occur in IRC, on Trac, and on make/core. The list currently has a rather poor signal/noise ratio, but is still a source of good information and discussion when other venues might not be ideal. Additional mailing list information is available on the WordPress.org Codex.
There are some important mailing lists for those who wish to follow core development:
The WordPress project is a meritocracy, run by a core leadership team, and led by co-founder and lead developer Matt Mullenweg. The team governs all aspects of the project, including core development, WordPress.org, and community initiatives.
Trusted contributors and core developers earn their stripes on more than just ability and actions. Leadership roles need to be earned on the basis of professionalism, personality, attitude, and respect among peers.
The best contributors naturally respect and subscribe to the project’s core philosophies. A lack of a personal agenda is paramount: we’re all a part of the same community, and we all share common goals. This doesn’t mean you can’t have an opinion, far from it. The best contributors can balance their opinion with the goals of the project and the perspectives of both users and developers. Offering consistently good suggestions, demonstrating a strong ability to collaborate with others, and being able to accept (and provide) feedback are all important.
You can identify these standards in some of our best core contributors, and that’s why they have strong influence over the project. Final decisions are made by the core team, which in turn has evolved over the life of the project based on merit.
The WordPress community is led via two main roads: the Internal Leads and the Community Volunteers. In many areas, such as UI and Support, the Community Leads are the driving force.
The WordPress project is led by the core leadership team, which consists of WordPress co-founder Matt Mullenweg, five lead developers, the head of User Experience (UX), and the two core developers with permanent commit access.
The lead developers are Ryan Boren, Mark Jaquith, Andrew Nacin, Andrew Ozz, and Peter Westwood. These developers have final authority on technical decisions, and lead architecture discussions and implementation efforts.
Jen Mylo is the head of User Experience for WordPress, and acts as a project and community manager.
Dion Hulse, Daryl Koopersmith, and Jon Cave are permanent core committers.
WordPress has a number of contributing developers. Some of these are former or current committers, and some are likely future committers. Regardless, these are trusted and veteran contributors to WordPress core who have earned a great deal of respect among their peers.
As needed, WordPress also has guest committers, individuals who are granted commit access, sometimes for a specific component, on a temporary or trial basis. Helen Hou-Sandi is currently a guest committer.
Other contributing developers include Michael Adams, Nikolay Bachiyski, Joseph Scott, Dominik Schilling, Sergey Biryukov, Cristi Burca, Andy Skelton, and Samuel Wood.
The core and contributing developers only guide WordPress development. Every version, hundreds of developers contribute code to WordPress. These core contributors are volunteers who contribute to the core codebase in some way. All it takes is a single patch to make a difference.
User experience lead Jen Mylo leads a team of core contributors who work on the design and user interface of WordPress. Matt Thomas is the style lead for WordPress. Ben Dunkle is the icon designer.
The support forums are run by a team of volunteer moderators, who remove spam, handle disputes, and generally keep the peace. They are led primarily by a self-appointed team leader, and everyone is encouraged to jump in.
This handbook, and the Codex, are the primary sources of information for learning how to develop, improve, and troubleshoot WordPress. The handbook is curated by a small group of volunteers, while the Codex is open for anyone and everyone to edit. There is some overlap with the Support team and the Codex.
WordPress applications for mobile devices are open source software, just like the project. There are six applications currently for iOS, Android, BlackBerry, Windows, WebOS, and Nokia platforms. WebOS and Nokia mobile application development has stopped, as the platforms are no longer supported.
The mobile development team consists of Isaac Keyet, Dan Roundhill, Jorge Bernal, Danilo Ercoli, and others. As the projects are open source, anyone can contribute.
Themes submitted to the WordPress Themes Directory are reviewed by a team of volunteers to ensure compliance with the WordPress.org theme guidelines. The team leads are Chip Bennett and Emil Uzelac, with Edward Caissie, Simon Prosser, and many other contributors working on developing standards and reviewing themes.
Plugins submitted to the WordPress Plugins Directory are reviewed by a team of volunteers to ensure they meet WordPress.org guidelines before being included in the plugin directory. The team lead is Scott Reilly, with volunteers Samuel Wood, Mika Epstein, Kailey Lampert, Daniel Bachhuber, Pippin Williamson, and Mark Riley (Reviewer Emeritus) reviewing plugins and developing standards.
You can get core development updates from the teams above on the Make WordPress blogs, or follow the development process in a variety of other ways.
WordPress uses Subversion (SVN), a very popular version control system managed by the Apache project, to manage changes to its codebase. A change to the WordPress codebase increments the revision number. Individual changes are called commits or changesets. These are denoted as either r12345 or [12345].
The WordPress repository of code is organized into three main directories: tags, branches, and trunk.
While it takes a developer with commit access (called a committer) to change the WordPress codebase, anyone can suggest a change in the form of a patch. A patch is a special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff (after the Unix command to generate a differences file). Patches have the extension of either .patch or .diff.
To create a patch, you will first need to check out a working copy of WordPress trunk. Subversion keeps a history of the code, but it also provides centralized repository that way committers do not overwrite each others’ changes. (A conflict occurs when a patch changes code that has since been modified.) For this system to work, each committer keeps a working copy of the same repository. Code is checked out as a local working copy, and then checked in (committed) to the centralized repository.
Contributors follow the same process, but as they cannot modify the central repository, they generate a patch that shows their changes. This patch can then be applied to the individual working copies of other contributors or committers, so it may be reviewed, tested, and potentially committed.
When writing a patch, it is important to always update to the latest version of trunk. Patches should never be written against a released version such as a tag or branch, with very rare exceptions. [Link: point releases.] Trunk is, however, a moving target, which can cause patches to become stale and require a refresh — they no longer apply properly, because code in the central repository no longer matches what the patch is attempting to change. Patches that alter a significant number of lines or files should generally be brought to the attention of committers sooner rather than later. [Link: getting attention]
Many developers run SVN commands using the command line interface such as Terminal on the Mac. Even most basic commands are simple, the command line is reasonably intimidating for many users. Many developers do rely on UI applications though, either for regular use or to handle complex actions more effectively.
On Windows, the premiere client is TortiseSVN, which is freeware. Lead developer Peter Westwood wrote a tutorial many years ago. [todo] link [/todo]
On Mac, you may wish to purchase Versions or Cornerstone [todo] (mac freeware?) [/todo]. Lead developer Mark Jaquith wrote a tutorial on command line usage. link
If you do not yet have a directory set up to do WordPress core development in, you could create it with ‘mkdir’:
mkdir ~/WordPress-dev
Go to the directory where you will be hacking the WordPress core:
cd ~/WordPress-dev
‘Checkout’ the WordPress core trunk with SVN, then enter the ‘trunk’ directory, which contains the WordPress code:
svn checkout http://core.svn.wordpress.org/trunk cd trunk
Happy hacking!
Once you’ve edited files and made changes, you will want to generate a patch which records the differences between your version of the files and those from trunk. To do so, ensure that you are in the ‘trunk’ directory created by your SVN checkout, then run the following, where ’00000′ is replaced with the ticket number from trac:
svn diff > 00000.patch
If you’ve made multiple changes to trunk and you wish only to submit a patch for certain select files or directory trees, these can be passed to ‘svn diff’ as arguments. In the following example, only changes made in the ‘wp-includes’ directory tree and the ‘theme-options.php’ file in the twentytwelve theme will be recorded. This means that if you were tinkering with some of the JavaScript or CSS files in the twentytwelve theme, but those changes are incomplete or not relevant to this trac ticket, they will not be included in the patch:
svn diff wp-includes wp-content/themes/twentytwelve/inc/theme-options.php > 00000.patch
So you have your SVN ‘trunk’ and you want to test out a patch that someone submitted in trac. Ensure that you are in the ‘trunk’ directory, then download the patch into that directory, if you have not done so already:
curl -O https://core.trac.wordpress.org/raw-attachment/ticket/00000/00000.patch
Note: If you download the patch this way, be sure that it is coming from the ‘raw-attachment’ directory on the trac server. You can grab this URL for copy-paste by clicking on the patch in trac, then grabbing the URL linked to by ‘Original Format’ at the bottom of the page.
From the ‘trunk’ directory, where you have downloaded the patch file, you can apply the patch against the source tree by issuing the following command:
patch -p0 < 00000.patch
Now, the ‘trunk’ source tree on your computer has been patched with the file you downloaded, giving you the version of the source tree that the developer who submitted that patch was working with.
Here’s a few useful tips if you are new to BASH and the *nix commandline:
Helpers:
http://nacin.com/2010/05/13/my-wordpress-bash-functions/
http://blog.ftwr.co.uk/archives/2008/07/19/my-wordpress-toolbox/
For a free cross-platform SVN GUI I use SmartSVN. They also have SmartGit which is the equivalent for Git.
Howdy! The Admin Bar API has changed quite a bit in WordPress 3.3.
First up, what may break your plugin. The added items are no longer stored in a publicly accessible (but ideally privately used) menu property. So, if you were doing something like $wp_admin_bar->menu->..., you won’t get anything back.
The reason for this is that the internal structure has changed. Nodes are no longer internally stored in a tree. Now, they’re stored in a flat list, and the tree is bound together just before render. This makes the internal API much more stable, and allows us to provide plugin developers some nifty new tools. Even core only handles nodes using the same APIs developers use (mostly).
If you were to open the file you will notice there are a number of new methods and signatures. Here are the ones developers will want to know:
add_node( $args ) or add_menu( $args ) (these are equivalent)remove_node( $id ) or remove_menu( $id ) (these are equivalent)get_node( $id ).add_group( $args ).Before I continue: I’m using “item,” “node,” and “menu” synomyously throughout this post. They all are referring to a single link in the admin bar. Nodes can be parents for other nodes, which creates dropdown menus. The API previously emphasized add_menu(), but this can be confusing, so add_node() is now being promoted a bit more. Both methods do the same thing.
Since the optional admin bar has been merged into the admin header, we’re now calling it the toolbar in the UI.

An example of groups in the new toolbar.
You can see these registrations in wp_admin_bar_wp_menu() and wp_admin_bar_add_secondary_groups().
Groups were added to provide us some styling flexibility and semantic divisions for a few different menus. (The right side of the top menu, “Howdy” and search, are their own group.) But the possibilities for plugins are pretty great. A plugin can bundle all of their nodes into a single group that then maintain visual separation from all other nodes in that menu. You can use the add_group() method to add groups.
While this isn’t a change from WordPress 3.2, it’s worth pointing out that add_node() is able to take the ID of an existing node as an argument, and then replace the specified arguments. For example, if you want to make the Network Admin level a top-level item, try this:
add_action( 'admin_bar_menu', 'nacin_promote_network_admin_in_toolbar', 25 );
function nacin_promote_network_admin_in_toolbar( $wp_admin_bar ) {
$wp_admin_bar->add_node( array(
'id' => 'network-admin',
'parent' => false,
) );
}
That was easy!
To make modifications easier, there’s now a get_node() to fetch a node’s properties, and even get_nodes() to fetch a flat list of all nodes, in case you want to loop through them.
The toolbar in not an optional admin bar now, it is part of the actual dashboard. If someone wants to remove it with a plugin, it would be on par with redesigning the dashboard, such as with Ozh’s dropdown menus, and the plugin author would need to design alternative ways to provide the information and access points in the toolbar. The toolbar is not a removable component like the old admin bar was, because it is also the dashboard’s header.
Kudos!