• 1.6.2: Tidy-up release. Editing a link now requires permission to edit that specific post, not just posts in general. The block editor panel is given the meta key from PHP, so the lh_page_links_to_return_link_meta_key filter now applies to the editor too, and the panel's strings are registered for translation. The redirect action name is derived from the plugin namespace (unchanged: lh_page_links_to_redirect_url). Removed unused code: write_log(), the debugging status filter, and the empty activation and deactivation hooks. Removed the Domain Path header, which pointed to a languages folder that does not exist. Added an index.php guard to the js folder. The on-disk readme.txt has been removed; readmes are now compiled from the portfolio documentation, which gained an overview, FAQ, and Hooks and filters page. The obsolete Add Page Link dialog, classic metabox instructions and screenshots, and the relative URL FAQ answer were deliberately dropped.
  • 1.6.1: Only valid, full URLs are now stored as a post's link. The link field accepts absolute http or https URLs only; an empty or invalid value is never saved, and clearing the field in the block editor removes the link instead of leaving an empty value behind. Previously the block editor saved an empty value on every post save, and because the sitemap exclusions only checked that the value existed, those posts and pages were wrongly hidden from the core XML sitemap and the LH HTML Sitemap. Both exclusions now skip empty and invalid values, and they no longer stop at five posts (get_posts defaulted to five). Relative links are no longer supported: they already failed validation, so no working redirect changes. Validation no longer does a DNS lookup on every request. The admin Link Url filter now treats empty values as having no link and keeps its selection after filtering. Also: the header now carries License, License URI, Requires at least and Requires PHP; plugin_version() reads the header; the editor script is versioned from it; the class_exists() wrapper and the unused rel2abs() helper are removed; admin output is escaped.
  • 1.06: Removed the classic editor metabox and save_post handler entirely. The block editor sidebar panel (js/editor.js), saving through the REST API, is now the only editing UI. Removed the add_meta_boxes(), render_links_to_box_content() and update_post_details() methods.
  • 1.05: Fixed WordPress 7.0 collaboration compatibility: replaced the __back_compat_meta_box flag with a use_block_editor_for_post() check in add_meta_boxes(). The classic metabox is now only registered when the block editor is genuinely not active for the post being edited, avoiding the classic editor iframe that breaks collaborative editing. Removed the unused is_classic_editor() helper.
  • 1.04: Added native block editor support via a PluginDocumentSettingPanel sidebar panel (js/editor.js). Post meta is now registered with show_in_rest so the block editor can read and write it through the REST API. The classic editor metabox is retained as a back-compat fallback and is hidden automatically when the block editor is active.
  • 1.03: Code quality and security improvements: removed the unused curpageurl() method, replaced extract() with explicit array access in rel2abs(), added esc_url() to admin column output, added fields=>ids to the get_posts() calls in the sitemap exclusion methods for performance, replaced the or keyword with ||, and removed vestigial empty cron infrastructure.
  • 1.02: Many code improvements. Changed the text domain to be WordPress compliant, added a column for linked pages, and added filters.
  • 1.00: Initial release.