=== Forward: Blogroll ===
Contributors: forlaens
Tags: blogroll, rss, feeds, syndication, shortcode
Requires at least: 5.8
Tested up to: 7.0
Requires PHP: 7.4
Stable tag: 1.0.18
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Import selected RSS feeds into a local blogroll and display the newest external posts with a shortcode.

== Description ==

Forward: Blogroll lets you follow selected blogs from inside WordPress. Add blog URLs or direct RSS feed URLs, validate them from the admin screen, import recent items, and display the newest external posts on any page with a shortcode.

Imported items are stored in a dedicated internal post type, so external posts stay separate from your normal Posts archive.

= Key features =

* Add blog URLs or direct RSS and Atom feed URLs from the WordPress admin.
* Discover feed URLs from site metadata and common feed paths.
* Validate feeds before importing.
* Choose how many recent posts are imported when a feed is first added.
* Check enabled feeds hourly with WP-Cron.
* Avoid duplicate imports using source, permalink, GUID, and publish date.
* Display imported posts with `[forward_blogroll]`.
* Includes bundled translation files for common languages.

= Good for =

* Personal or team blogrolls.
* Curated reading pages.
* Publisher networks that want to highlight recent external posts.

== Installation ==

1. Install the plugin from **Plugins > Add New**, or upload the `forward-blogroll` folder to `/wp-content/plugins/`.
2. Activate the plugin from the **Plugins** screen in WordPress.
3. Open **Blogroll** in the WordPress admin menu.
4. Add one or more blog URLs or RSS feed URLs.
5. Open **Blogroll > Import settings** and choose how many recent items to import for new feeds.
6. Add `[forward_blogroll]` to the page where the blogroll should appear.

== Shortcode ==

Basic usage:

`[forward_blogroll]`

Limit the number of displayed items:

`[forward_blogroll posts_per_page="10"]`

The `posts_per_page` value is capped at 100.

Display items from one configured source:

`[forward_blogroll source="source_id"]`

You can copy a source ID from the shortcode options table in the Blogroll admin screen.

== External requests and stored data ==

Forward: Blogroll makes HTTP requests only to the blog and feed URLs you configure. It uses those requests to discover RSS or Atom feed URLs, validate feeds, and import new items during scheduled WP-Cron checks.

For each imported item, the plugin stores the item title, source name, source feed URL, original permalink, publish date, duplicate-prevention fingerprints, and image URL when one is available. It does not copy full article content into normal WordPress posts.

== Frequently Asked Questions ==

= Does this listen to feeds in real time? =

No. WordPress checks enabled feeds on a schedule. By default, the plugin uses hourly WP-Cron checks.

= Will imported items appear as regular blog posts? =

No. Imported items are stored as internal Blogroll Items and shown only where the shortcode is used.

= Does this copy entire external articles? =

No. The plugin stores enough metadata to display and link to the external item, but it does not import full article content into your Posts archive.

= Can I add a normal blog URL instead of an RSS URL? =

Yes. The plugin tries to discover the RSS or Atom feed from the site URL.

= What happens if a feed cannot be validated? =

The source is marked with an error so you can correct or remove it from the Blogroll admin screen.

== Screenshots ==

1. Blogroll source list with validation status for each feed.
2. Add-feed row with blog name and blog/RSS URL fields.
3. Import settings screen.
4. Frontend blogroll output from the shortcode.

== Changelog ==

= 1.0.18 =

* Remove the external Author URI and use the WordPress.org profile for the Forward plugins link.

= 1.0.17 =

* Move Blogroll admin JavaScript into an enqueued admin script.
* Keep WordPress.org directory-only assets out of the plugin package.

= 1.0.16 =

* Remove the legacy manual textdomain loader so WordPress.org can load translations automatically without Plugin Check warnings.

= 1.0.15 =

* Ensure Blogroll admin styling loads consistently on the import settings screen.
* Improve primary button text contrast in the Blogroll admin.

= 1.0.14 =

* Add programmatic labels to feed source fields for screen readers.
* Improve checkbox and remove-button target sizes in the Blogroll admin.

= 1.0.13 =

* Apply the Forward color palette to the Blogroll admin and shortcode output, including light and dark color modes.

= 1.0.12 =

* Improve the feed source table on narrow screens by turning source rows into stacked mobile cards.

= 1.0.11 =

* Improve responsive behavior for the feed management and import settings screens.

= 1.0.10 =

* Correct the Forlæns author metadata.

= 1.0.9 =

* Add the shared Forward icon to plugin assets, the admin menu, and Blogroll admin headers.

= 1.0.8 =

* Remove the eyebrow label above the main Blogroll admin heading.

= 1.0.7 =

* Improve admin accessibility by avoiding fixed inherited paragraph font sizes.
* Harden feed URL validation and remote feed discovery.
* Restrict imported image URLs to HTTP and HTTPS.
* Escape imported item titles in shortcode output.
* Cap shortcode `posts_per_page` values.
* Add uninstall cleanup for plugin options, scheduled events, imported items, and import locks.
* Refresh translation templates and compiled language files.

= 1.0.5 =

* Harden per-source duplicate prevention and only import feed items newer than the latest imported item.

= 1.0.4 =

* Fix immediate saving when a feed source is removed.

= 1.0.3 =

* Move import settings to a dedicated submenu page.

= 1.0.2 =

* Add a CSS background-image variable to imported item cards for easier theme styling.

= 1.0.1 =

* Add a global setting for the number of recent posts imported when adding a feed.
* Improve duplicate prevention and per-feed import tracking.

= 1.0.0 =

* Initial release.

== Upgrade Notice ==

= 1.0.17 =

Uses an enqueued admin script and keeps directory-only assets out of the plugin package.

= 1.0.16 =

Removes the legacy textdomain loader for cleaner WordPress.org Plugin Check results.

= 1.0.15 =

Ensures Blogroll admin styling loads consistently on the import settings screen and improves primary button contrast.

= 1.0.14 =

Improves Blogroll admin accessibility for feed source editing.

= 1.0.13 =

Applies the Forward color palette to the Blogroll admin and shortcode output.

= 1.0.12 =

Improves the Blogroll feed source layout on smaller screens.

= 1.0.11 =

Improves admin screen layouts on smaller screens.

= 1.0.10 =

Corrects the Forlæns author URL.

= 1.0.9 =

Adds the shared Forward icon to plugin assets and admin screens.

= 1.0.8 =

Removes the small label above the main Blogroll admin heading.

= 1.0.7 =

Improves feed URL validation, shortcode bounds, accessibility, and localization.
