In responding to a support thread for one of my plugins (WP Biographia); it looks like there's a mutual clash between WP Biographia and WordPress SEO in how our respective plugins handle and interpret a user's Twitter ID, added to their profile via the
user_contactmethods filter hook.
WP Biographia's implementation of a user's Twitter profile is via a fully qualified path to the user's profile, so my Twitter profile would be specified as
WordPress SEO's implementation of a user's Twitter profile is via just the profile name, such as
This is the clash. In WP Biographia, any contact URL, including Twitter, in a user's profile is just that, a fully qualified domain name and path to a specific URL on the internet. In WordPress SEO, the Twitter contact is just the profile name and the plugin assumes that this user profile field is only going to be used for Twitter cards via the WordPress SEO plugin.
Depending on which order you install (or update settings) WP Biographia and WordPress SEO in, one of the plugins is going to overwrite the Twitter settings of the other and effectively break it.
Now to be completely fair, the WordPress API documentation is ambiguous on what should actually be in a user's profile contact methods. It's assumed that the user's email address will be used as part of a mailto URL and it's also assumed that the user's website will be an FQDN. But beyond that, the default set of contact methods (AIM, Yahoo IM and Jabber/Google Talk) have no proscriptions on what needs to be in these fields, so there's a matter of personal interpretation as to whether this should be a profile identifier, or a FQDN to that contact method's profile.
I've made the assumption that they should be FQDNs as this will support interoperability with other parts of WordPress and other plugins. WordPress SEO has made the assumption that the Twitter contact link will just be the profile name.
Both valid assumptions, but both mutually incompatible with the other.
I'm not sure where to go with this; if I change my plugin, it may break other plugins, but if you change yours, the same may happen.
I'd love to hear your thoughts on this.