WordPress Crosspost

Description

WordPress Crosspost posts to your WordPress.com (or self-hosted JetPack-enabled) blog of your choice whenever you hit the “Publish” (or “Save Draft”) button. It can import your reblogs and other posts on WordPress.com. It even downloads the media attachments in your WordPress.com posts and saves them in your self-hosted WordPress Media Library.

Transform your self-hosted WordPress website into a back-end for your WordPress.com-hosted website. Create original posts on your local computer, but publish them to WordPress.com. Import your WordPress.com reblogs. Always have a portable copy (a running copy) of your entire WordPress.com blog.

This plugin uses WordPress.com’s REST API to keep posts in sync; when you edit your WordPress post, it updates your crossposted post. Private WordPress posts stay private on the remote site, deleting a post from WordPress that you’ve previously cross-posted deletes it from the remote site, too, and so on. Scheduling a WordPress post to be published any time in the future will add it to the remote site’s future publication schedule, too. See the Other Notes page for a complete listing of features.

WP-Crosspost is very lightweight. It just requires you to connect to your WordPress.com account from the plugin options screen. After that, you’re ready to cross-post!

Other options and features enable tweaking additional metadata from your WordPress entry (notably categories and tags) to the remote site, switching comments and pingbacks on or off, and more.

WP-Crosspost transforms your self-hosted WordPress website into a back-end for your WordPress.com-hosted website. Create your posts locally on your own computer’s WordPress, but publish to WordPress.com’s servers. This means you’ll always have a portable copy of your entire blog, and you can stop worrying about whether your backups are up to date. Create new content locally, then move them to the server automatically, instead of the other way around!

Servers no longer serve, they possess. We should call them possessors.

Ward Cunningham

Learn more about how you can use this plugin to own your own data in conjunction with the “Bring Your Own Content” self-hosted Web publishing virtual appliance.
Maintaining this plugin is a labor of love. However, if you like it, please consider making a donation for your use of the plugin, purchasing one of Meitar’s web development books or, better yet, contributing directly to Meitar’s Cyberbusking fund. (Publishing royalties ain’t exactly the lucrative income it used to be, y’know?) Your support is appreciated!

This plugin is inspired by and based on Tumblr Crosspostr.

Full feature list

WP-Crosspost turns your self-hosted WordPress blog into the back-end of one of your WordPress.com sites. Crossposting between self-hosted WordPress blogs is theoretically supported (but untested) if you have JetPack installed and enabled on the remote self-hosted WordPress blog.

You can crosspost (push):

  • Posts (of any type, including Pages and custom post types). Pushed data includes the post’s:
    • date
    • title
    • status and visibility settings (including the post password if set and whether or not the post is currently in the trash)
    • format
    • tags
    • categories
    • slug
    • whether comments are on or off
    • whether pingbacks are on or off
    • whether the post is sticky
    • featured image,
    • content
    • excerpt,
    • image attachments, along with the actual image media file itself

Some notes on crossposting (push-posting):

  • If you update a post on the remote site (such as on WordPress.com), the change will not be pulled back automatically, so always prefer to use your self-hosted WordPress blog to make changes.
  • When you upload a file to your Media Library, it will not be crossposted to the remote site’s Media Library until and unless you attach it to a post and save the post.
  • The URLs of images and other media files will be automatically rewritten to reference the remote site’s copy, so always use local URLs in your posts. (Let the plugin handle media URLs itself.)

When sync’ing is enabled, you will import (pull):

  • Posts (of any type, including pages and custom post types), including the post’s:
    • date
    • title
    • content
    • excerpt
    • status and visibility settings (including the post password if set and whether or not the post is currently in the trash),
    • whether comments are on or off
    • whether pingbacks are on or off
    • geolocation
    • featured images
    • media attachments, along with the actual media file itself

Wondering if WP-Crosspost can do something you don’t see on this list? Ask about or search for it in the WP-Crosspost plugin support forum! Also, I’m just one guy working on this whenever I get the time to, so I prioritize the most often requested features. If your feature isn’t high on my list, please be patient or, better yet, donate to support my work on this plugin so that I have more time to devote to this work. Thanks! ๐Ÿ™‚

Screenshots

  • When you first install WP-Crosspost, you'll need to connect it to your WordPress.com account before you can start crossposting. This screenshot shows how its options screen first appears after you activate the plugin.

  • Once you create and enter your client ID and secret, click "Save Changes." The options screen prompts you to connect to WordPress.com with another button. Press the "Click here to connect to WordPress.com" button to begin the OAuth connection process.

  • After allowing WP-Crosspost access to your WordPress.com account, you'll find you're able to access the remainder of the options page. You must choose at least one default WordPress site to send your crossposts to, so this option is highlighted if it is not yet set. Set your cross-posting preferences and click "Save Changes." You're now ready to start crossposting!

  • You can optionally choose not to crosspost individual WordPress posts from the WP-Crosspost custom post editing box. This box also enables you to send a specific post to a WordPress.com site other than the default one you selected in the previous step, and crosspost the post's excerpt rather than its main body.

  • Get help where you need it from WordPress's built-in "Help" system.

Installation

  1. Download the plugin file.
  2. Unzip the file into your ‘wp-content/plugins/’ directory.
  3. Go to your WordPress administration panel and activate the plugin.
  4. Go to WordPress Crosspost Settings (from the Settings menu) and either create or enter your WordPress.com OAuth client id and client secret. Then click “Save Changes.”
  5. Once you’ve entered your client id and client secret, a “Connect to WordPress.com” button will appear. Click that to be redirected to WordPress.com’s authorization page.
  6. Click “Authorize” to grant access to your blog from WP-Crosspost.
  7. Start posting!!!

See also the Screenshots section for a visual walk through of this process.

Installation notes and troubleshooting

If you are having trouble installing or using WP-Crosspost, first make sure have the following necessary components installed on your server:

Moreover, WP-Crosspost makes use of Manuel Lemos’s oauth_client_class for some core functions. Most systems have the required packages installed already, but if you notice any errors upon plugin activation, first check to ensure your system’s PHP include path is set correctly. The lib directory and its required files look like this:

lib
โ”œโ”€โ”€ OAuthWP.php
โ”œโ”€โ”€ OAuthWP_WordPressDotCom.php
โ”œโ”€โ”€ WPCrosspostAPIClient.php
โ”œโ”€โ”€ httpclient
โ”‚ย ย  โ”œโ”€โ”€ LICENSE.txt
โ”‚ย ย  โ””โ”€โ”€ http.php
โ””โ”€โ”€ oauth_api
    โ”œโ”€โ”€ LICENSE
    โ””โ”€โ”€ oauth_client.php

It’s also possible that your system administrator will apply updates to one or more of the core system packages this plugin uses without your knowledge. If this happens, and the updated packages contain backward-incompatible changes, the plugin may begin to issue errors. Should this occur, please file a bug report on the WP-Crosspost project’s issue tracker.

FAQ

Can I specify a post’s tags or categories?

Yes. WordPress’s tags and categories are also crossposted to your other WordPress sites. If you’d like to keep your local WordPress tags or categories separate from your crossposted ones, be certain you’ve enabled the “Do not send post tags in crossposts” or “Do not send post categories in crossposts” setting.

Additionally, the “Automatically add these tags to all crossposts” setting lets you enter a comma-separated list of tags that will always be applied to your crossposts.

Can I crosspost older WordPress posts?

Yes. Go edit the desired post, verify the crosspost option is set to Yes, and update the post. WP-Crosspost will keep the original post date.

What if I edit a post that has been cross-posted?

If you edit or delete a post, changes will appear on the remote site accordingly.

Can I cross-post Private posts?

Yes. WP-Crosspost respects the WordPress post visibility setting and supports cross-posting private posts. Editing the visibility setting of your WordPress post will update your remote site’s cross-posted entry with the new setting, as well.

Is WP-Crosspost available in languages other than English?

Not yet, but with your help it can be. To help translate the plugin into your language, please sign up as a translator on WP-Crosspost’s Transifex project page.

Reviews

Wonderful

This plugin does exactly what I had been looking for. I came across this plugin by delving into the BYOC project, which was a breeze to set up. For WordPress it works without any issues and I’m thankful I don’t have to do the manual work anymore.

Great job ๐Ÿ™‚ and thank you.

Beware of Meitar and his plugin.

This plugin is dangerous, and can and likely will destroy your website.

The cleanup required after uninstalling this flaming turd is about forty five to 50 minutes, if it makes it through three posts or so. Your mileage may vary, but for me, it generated between 150 and 200 junk copies of posts I had already made.

It’s remarkably bad. Not just the usual unfinished bad, but intentionally dangerous, and misleading bad.

Meitar, was considerate and well mannered when I contacted him about the issue on Github. He called me crazy for thinking their was a problem, called me an idiot no less than three times; and then, he offered some truly amusing unsolicited professional advice.

The term, “jumping down your throat,” doesn’t really cut it here. Maitar has some truly unresolved daddy issues that really show through both in his work, and conversations.

When I attempted to follow up, and commend him on his comedy, I found myself blocked.

Expect similar results if you’re in the mood for earnestly reporting a problem to this character. He’s very thin skinned, and will not stand for anything but a pat on the head for a job well done. After viewing his Github profile, where he’s selling his own brand of troll politics for unknown reasons, it’s not hard to understand why.

This plugin is not designed to work.

It’s designed for the trollish amusement of its author. He likes screwing up people’s sites. It’s what he’s doing. It’s why he exists.

Anyone saying anything kind about this thing is either not seriously using it, or lying.

That’s my opinion about this monstrosity.
Do with it as you will.

Good plugin, but too limited for what I need

First of all, congrats to the developer for taking this on. I did a thorough search, and right now, this is the only available option I could find (some other plugins which used to do this are no longer supported).

I was looking for something that would cross post from one self-hosted blog to another. Cross Post will do this if the destination blog is attached to WordPress.com via Jet Pack, and the JSON API is enabled. There are explicit instructions on how to set this up in the Forum, and if you follow them, it’s fairly straight forward.

That said, after a thorough investigation, I decided I couldn’t use Cross Post. The basic problem is that my sites all use featured images, and all use custom fields. Cross-posting a post without that information is next to useless for me, and that’s what happens. That was the killer.

Another issue, which I could have worked around, but was annoying, is the inflexibility of automatic cross posting. I was looking to cross post posts from a city-wide database to another site that focused on a particular neighborhood. Cross Post uses only Categories to decide whether to ignore or cross post something. Given the way my taxonomy was set up, there was no convenient way to manage this. It needs to allow cross posting by tags, or by a custom taxonomy, as well as categories. Right now, it appears the category selection can only block whether a post gets cross posted. There needs to be an affirmative option, such as “only post if it’s tagged ‘crosspost'”.

If you use basic Posts without additional custom data, this is potentially a very useful plugin. If you use custom fields, taxonomies, and featured images, it’s probably too limited.

I hope the developer continues to enhance this product, because I’d love to be able to use it.

Read all 6 reviews

Contributors & Developers

“WordPress Crosspost” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

Version 0.4.2

  • Bugfix: Enable crossposting via XML-RPC or REST API.

Version 0.4.1

  • Feature: Support cross-posting image attachments in posts. (This is in addition to a post’s “featured image.”)

Version 0.4

  • Feature: Cross-post featured images (Post Thumbnails). This works both for uploading and importing. Featured images you add to your local WordPress Media Library will be added to your site’s Media Library on WordPress.com.
  • Feature: Automatically convert local audio embeds into remote audio embeds.
  • Bugfix: Prevent duplicate importing of pages and custom post types during sync routines. (Regular posts were already de-duped.)
  • Bugfix: Prevent WP-Cron invocations from duplicating sync schedules.
  • Developer: New filter hook wp_crosspost_prepared_post lets other plugin authors customize the data about to be crossposted.

Version 0.3.3

  • Bugfix: Handle several PHP E_NOTICE errors in strict environments.

Version 0.3.2

  • Feature: Support rel-syndication IndieWeb pattern as implemented by the recommended Syndication Links plugin.
    • rel-syndication is an IndieWeb best practice recommendation that provides a way to automatically link to crossposted copies (called “POSSE’d copies” in the jargon) of your posts to improve the discoverability and usability of your posts. For Tumblr Crosspostr’s rel-syndication to work, you must also install a compatible WordPress syndication links plugin, such as the Syndication Links plugin, but the absence of such a plugin will not cause any problems, either.
  • Bugfix: Consistent post meta field names resolve several issues where previously-crossposted entries were not found or had incorrect syndication links associated with them.

Version 0.3.1

  • Bugfix: Respect “Do not send post categories in crossposts” option. Also fixes issues with category-based crossposting exclusion.

Version 0.3

  • Feature: Publicize integration enables you to broadcast a link to your crossposted post on your Facebook, LinkedIn, Google+, Tumblr, Twitter, or Path account. Simply connect the service of your choice to your WordPress.com blog and crosspost as usual.
    • Attention Tumblr users, I strongly recommend using the Tumblr Crosspostr plugin instead. It provides more seamless integration, greater customization, better attribution options, and doesn’t rely on the third-party cloud services that Publicize does.
  • Feature: Option to set global default value for Publicize integration. Useful for multi-author blogs and customized editorial workflows. (You can still override this on a per-post basis.)
  • Feature: “Crosspost-ify Everything!” tool enables one-click crossposting of your entire blog archive.
  • Feature: Post stickiness is now cross-posted, too.
  • Feature: Post categories are now imported when sync’ing.
  • Feature: Show “View post on WordPress.com” link in Posts listing screen, and in Post Edit screen inside WordPress Crosspost custom metabox.
  • Bugfix: Remove sync schedules on plugin deactivation. (This improves performance, security, and prevents errors by ensuring any WordPress.com synchronization routines are not invoked if you have deactivated but not deleted WP-Crosspost.)

Version 0.2.1

  • Feature: Crosspost password protected posts with their password, too.

Version 0.2

  • Feature: “Sync posts from WordPress.com” will import posts you create on your WordPress.com blog(s) into your self-hosted WordPress blog, along with their metadata, tags, post formats, geolocation data, and attachments. This is useful for creating an automatic backup of the conversations you have in reblog threads on WordPress.com.
    • When first activated, your entire WordPress.com blog archive will be copied (including private posts and custom post types).
    • Once every 24 hours, WordPress Crosspost will fetch up to the most recent 200 posts on your WordPress.com blog to see if you have reblogged anything on the service. If you have, WordPress Crosspost will import those posts to your self-hosted WordPress blog.
    • Posts you created on WordPress.com using WordPress Crosspost will not be duplicated.
    • Once imported to your self-hosted WordPress blog, edits you make on WordPress.com are not retrieved, but edits you make on your self-hosted WordPress blog are sent back to WordPress.com, so prefer using your self-hosted WordPress blog to edit and update your imported posts.
    • This feature is experimental. Please make sure you have a backup of your WordPress website before you enable sync’ing from WordPress.com
  • Security: Improved protection for OAuth access tokens.
  • Bugfix: Ensure sanitization routines do not corrupt OAuth access tokens.
  • Minor code cleanup.

Verson 0.1

  • Initial release.