Happy to report that Bylines has found a new home with PublishPress.
Bylines is a modern rewrite of Co-Authors Plus that I started last April. It hasn't been anywhere near my primary focus for quite a while, so I finally called a spade a spade and started looking for a new owner. Fortunately, it's a perfect fit for the developers behind PublishPress — I'm glad my customers ended up in good hands.
You can read more about the announcement on the Bylines website.
While working on wordpress/gutenberg#4072 today, I was inspired to do some data analysis on the WordPress.org plugin directory.
To prepare, I populated a
plugins table with data from the WordPress.org REST API via this plugin-stats.php script. Download the SQL file to avoid needing to re-fetch the API data.
Based on the initial API request, there are 49,749 total WordPress.org plugins.
Of the entire data set, only 18,002 plugins have 200 or greater active installs. The remaining 31,747 plugins represent an inconsequential number of active installs compared to the total.
The 18,002 plugins represent 182,296,500 total active installs. A WordPress install can have multiple active plugins, so this total isn't unique WordPress installs. Also, we can ignore the remaining ~32k plugins because they would only represent 3,174,700 additional active installs if each plugin had 100 active installs.
Of the total active installs, 168,623,000 (92.5%) are represented by 3,440 plugins with >=5000 active installs. For that matter, 159,720,000 (87.6%) are represented by 2101 plugins with >=10000 active installs.
It'd be interesting to know what percentage of WordPress installs have a plugin not tracked in the WordPress.org plugin directory (e.g. premium or custom).
Some incomplete ideas I've been noodling on that I want to make public.
Ultimately, the goal is: the vast majority of WordPress users are excited and should be able to use Gutenberg on day one. Fundamentally, this breaks down into two objectives:
- Make the end-user experience is so good that WordPress users actively want to switch to it. We need to continue user testing as we have been, and iterate based on real user feedback. We also need to market Gutenberg — communicate what users should expect and get them appropriately excited.
- Mitigate WordPress plugin and theme incompatibilities, to minimize conflicts that would cause WordPress to fall back to the classic editor. Success is defined by the majority of WordPress users being able to use Gutenberg on day one. If too many can't use Gutenberg because of conflicts, then we've failed at launch.
I've been brainstorming some strategies for the latter, which really is two parts: identification and mitigation.
First, we need to identify the true extent of the problem: what plugins and themes are incompatible with Gutenberg, and in what ways are each incompatible? Some automated ways we can produce this data includes:
- Manual/automated analysis of action and filters usage, etc.
- Activate each in an isolated environment and take before/after screenshots of the editor screen.
But, I'm thinking good ol' fashioned crowd-sourcing might be most effective. What if WordPress users had an easy way to report whether a given plugin or theme was compatible with Gutenberg? We could collect this data in aggregate to get a good sense of what types of incompatibilities we should expect, and where we should focus our efforts.
Once we've identified the plugin and theme conflicts, we'll need to mitigate them. Doing so will require excellent documentation, so authors more easily understand the changes they'll need to make, and deputizing other developers to help with the outreach process.
I’m working on a new project (the kind you wake up at 3 am to hack on). It’s called Bylines, a modern multi-author publishing plugin for WordPress.
MVP is a reincarnation of Co-Authors Plus. From there, I plan to iterate on a feature set relevant to the multi-author publishing workflow.
If this sounds useful to you, sign up to be notified when Bylines is ready for early-access users.
Getting ready to release a WordPress plugin? Here’s a handy checklist you can follow.
1. Update the readme for the release
- Include all changes in the changelog
- List order is typically: major enhancement, minor enhancement, bug fix
- Use active voice, present tense.
- “Shows an admin notice when Redis is unavailable”
- Update version numbers as appropriate
- Plugin header in the main plugin file.
- Compile README.md from readme.txt (which is needed for WordPress.org)
2. Tag a new version on Github
- Use the releases feature to create a new Release, with a Git tag of the appropriate version number (e.g. “v0.5.0”).
- Double-check tag name / version number.
- Copy and paste the changelog into the Release body.
3. Tag a new version on WordPress.org
- Sync the codebase with WordPress.org plugin Subversion trunk
- Create a new Subversion tag from trunk.
svn cp trunk tags/0.5.0
- Commit the tag.
4. Publish blog post / execute promotion strategy as necessary.
Need access to a WordPress install but don’t want to create a new user account? Use this plugin and WP-CLI to generate a one-time login URL for any existing user:
wp plugin install one-time-login --activate && wp user one-time-login <user>
After you run the command, you’ll see a success message like this:
Success: Your one-time login URL is: http://wp.dev/wp-login.php?user_id=1&one_time_login_token=eb6f4de94323e589addb9ad3391883e1d6233bc3
Copy the URL, paste it into your web browser, and… voila!
Feel free to file issues and pull requests against the project on Github.
If you need automatic Bitly integration with your WordPress, check out Bitly URL Generator, a rewrite of Micah Ernst’s classic plugin of the same name.
This version improves upon the original plugin in a couple key ways:
add_post_type_support( 'my-cpt', 'bitly' ) works as expected, without needing to register additional actions for your custom post type.
- Introduces a
wp bitly backfill WP-CLI command for generating Bitly short URLs on old posts, instead of doing the backfill with wp-cron.
Like the original, the plugin filters
pre_get_shortlink to return your Bitly short URL for
Feature request, bug report, or violent dissent? Hit me up with a Github issue.
On WordPress projects where the entire application is defined by the theme, it can be common to submodule or directly commit WordPress plugins to a directory like
theme-name/lib. However, in doing so, you lose out on WordPress’ built-in update tracking.
It would be cool to have a utility plugin that loads theme-specific plugins into the Manage Plugins view and WordPress update check.
stephenharris/wp-readme-to-markdown. If you maintain any WordPress plugins on Github, this is pretty freaking awesome.
Co-Authors Plus makes it possible to assign multiple bylines to posts, pages, and custom post types via a search-as-you-type meta box. Thanks to Mike Patek at Vocativ, version 3.1 includes co-author management via Quick Edit:
Also in this release:
- Updated Spanish translation, courtesy of sergiomajluf.
- Now matches core behavior when displaying author archive on multisite: user of the blog, or previously published author on the blog.
- Breaking change: “Create Profile” link is no longer shown by default on the Manage Users screen. Instead, it can be enabled with the
- Guest authors work properly with Jetpack Open Graph tags. Props hibernation.
- Guest author profile editor now supports a few different fields. Props alpha1.
coauthors_count_published_post_types filter for specifying the post type(s) used when calculating the user’s number of published posts.
- Bug fix: Ensure
post_author is set to one of the co-authors assigned to a post.
- Bug fix: Filter author feed link for guest authors on the author page. Props hibernation.
- Packages a composer.json file for those using Composer.
- Beginnings of unit test coverage for core features. Increased minimum required WordPress version to 3.7 because WordPress.org unit testing framework doesn’t work reliabilty below that.
Please leave feedback, bug reports, and praise in the WordPress.org forums. You can also get involved with development on Github.