Sync OPML to Blogroll

Keep your WordPress blogroll in sync with your feed reader.

Installation

Within WP Admin, visit Plugins > Add New and search for, e.g., sync OPML to locate the plugin. (Alternatively, upload this plugin’s ZIP file via the “Upload Plugin” button.)

Install and activate, and then head over to Settings > Sync OPML to Blogroll to tell WordPress about your OPML endpoint of choice.

Configuration

For OPML URL, fill out your feed reader’s OPML endpoint. (E.g., Miniflux’s endpoint usually looks like this: https://your.miniflux.site/v1/export. Other feed readers typically expose OPML documents in a similar manner.)

The plugin will start importing feed links immediately after it is first configured. This might take a while for really large feeds!

Note: For a feed to be picked up, it requires both a valid site URL and a valid feed link, though most if not all feed readers will take care of that for you.

Basic Authentication

Sync OPML to Blogroll supports basic authentication as used by, e.g., Miniflux. That’s what the Username and Password fields are for. These may be left blank if not applicable.

Note: Unless you manually add a SYNC_OPML_BLOGROLL_PASS constant to wp-config.php (see below), your password is saved to WordPress’s database in plaintext format. (That’s basic authentication for you, unfortunately.)

Defining the password in wp-config.php rather than storing it in the database is done by adding the following line to wp-config.php, just before /* That's all, stop editing! Happy publishing. */:

define( 'SYNC_OPML_BLOGROLL_PASS', 'your-password-here' );

If you’ve previously filled out and saved the password field, and only recently added above constant, simply visit Settings > Sync OPML to Blogroll and hit Save Changes to wipe your password from the database.

Excluding Feeds

Versions 1.1 and up allow “blocklisting” certain strings. Any feed URL that contains any of these will be ignored during import. This way, you can stop “private” feeds that, e.g., contain a “secret” key, from being imported—and from being displayed on your site. In the Denylist field, add one such string per line.

Categories

Importing categories is optional and in a somewhat experimental phase, and disabled by default. OPML 2.0 and hierarchical categories are currently not supported. If you find categories are wrongly assigned, you may want to simply disable this option (and, if necessary, define and set categories manually).

To display links on your site’s front end, use the [bookmarks] shortcode. Here’s but one usage example:

<ul id="blogroll">[bookmarks title_li='' categorize=1 title_before='<h3>' title_after='</h3>]</ul>

The shortcode works inside a Custom HTML or Shortcode block, or the classic editor.

Of Note

This plugin explicitly enables the WordPress Link Manager that’s disabled by default since version 3.5. No need for other Link Manager plugins that do the same.

Sync Rate

This plugin will attempt to fetch and process your OPML once daily, starting 15 minutes after it is first installed. It will also “force sync” immediately after it is first configured or settings are changed. (Not just saved, but changed.) This might take a while for really large feed lists!

On “Syncing”

While feeds that are deleted from your reader and thus OPML endpoint will also be deleted from WordPress, existing WordPress bookmarks without a feed link are left alone.

Names, categories and even site URLs can be edited after feeds are imported, and changes will not be overwritten by future sync actions. (That also means that name changes on your feed reader’s end will not affect WordPress links. This plugin, in fact, only looks at feed URLs to determine what to do.)

“Syncing,” by the way, only works in one direction: from your OPML endpoint to your WordPress blogroll.