{"id":246656,"date":"2025-08-26T18:46:40","date_gmt":"2025-08-26T18:46:40","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/linkable\/"},"modified":"2025-11-28T04:09:27","modified_gmt":"2025-11-28T04:09:27","slug":"linkable","status":"publish","type":"plugin","link":"https:\/\/twd.wordpress.org\/plugins\/linkable\/","author":23346999,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Linkable","header_author":"void","header_description":"Linkable makes internal linking easy by automatically linking keywords in your posts to other posts or pages on your site.","assets_banners_color":"ee9f4f","last_updated":"2025-11-28 04:09:27","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/void.dk","header_author_uri":"https:\/\/renekirk.com","rating":5,"author_block_rating":0,"active_installs":30,"downloads":375,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"voiddk","date":"2025-11-28 04:09:27"}},"upgrade_notice":{"1.0.0":"<p>Initial release<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3350667,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3350667,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3350667,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3350667,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Linkable panel in Gutenberg sidebar","2":"Plugin settings page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[12539,148076,19933,6681,186],"plugin_category":[55,57],"plugin_contributors":[246853],"plugin_business_model":[],"class_list":["post-246656","plugin","type-plugin","status-publish","hentry","plugin_tags-autolink","plugin_tags-gutenberg","plugin_tags-internal-linking","plugin_tags-internal-links","plugin_tags-seo","plugin_category-seo-and-marketing","plugin_category-taxonomy","plugin_contributors-voiddk","plugin_committers-voiddk"],"banners":{"banner":"https:\/\/ps.w.org\/linkable\/assets\/banner-772x250.png?rev=3350667","banner_2x":"https:\/\/ps.w.org\/linkable\/assets\/banner-1544x500.png?rev=3350667","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/linkable\/assets\/icon-128x128.png?rev=3350667","icon_2x":"https:\/\/ps.w.org\/linkable\/assets\/icon-256x256.png?rev=3350667","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Linkable is a lightweight WordPress plugin that automates internal linking by converting defined keywords into links to selected posts or pages.<\/p>\n\n<p><strong>Core functionality:<\/strong>\n* Automatically links keywords to chosen posts or pages\n* Works on singular posts and pages by filtering <code>the_content<\/code> at priority 20\n* Searches for keyword matches inside <code>&lt;p&gt;<\/code>, <code>&lt;li&gt;<\/code>, <code>&lt;b&gt;<\/code>, <code>&lt;em&gt;<\/code>, and <code>&lt;i&gt;<\/code> tags\n* Skips self-links by excluding the current post from the keyword map\n* Uses the Yoast SEO title for link tooltips when Yoast is active, otherwise falls back to the WordPress title\n* Preserves existing <code>&lt;a&gt;<\/code> tags and shortcodes by backing them up before processing and restoring them afterward<\/p>\n\n<p><strong>Keyword management:<\/strong>\n* Keywords are stored per post and per page as JSON in the <code>linkable_tags<\/code> post meta field\n* <code>linkable_tags<\/code> is registered with REST support, sanitized via <code>sanitize_text_field<\/code>, and restricted to users with <code>edit_posts<\/code><\/p>\n\n<p><strong>Settings:<\/strong>\n* Accessible via Settings \u2192 Linkable\n* <code>max_links_per_target<\/code>: limits how many times the same target can be linked from one post (default 1)\n* <code>first_occurrence_only<\/code>: when enabled, each keyword is linked only once per post<\/p>\n\n<p><strong>Performance:<\/strong>\n* Builds a global keyword map from all published posts and pages with <code>linkable_tags<\/code>\n* Caches the keyword map with a transient (<code>global_linkable_tag_map<\/code>) for one hour\n* Query optimized to fetch only IDs and avoid unnecessary meta\/term caching<\/p>\n\n<p><strong>Editor compatibility:<\/strong>\n* Works with both the block editor and the classic editor\n* Enqueues an admin sidebar panel script (<code>static\/js\/admin-sidebar-panel.js<\/code>) with WordPress dependencies and versioning via <code>filemtime<\/code><\/p>\n\n<p><strong>Security:<\/strong>\n* URLs are properly escaped with <code>esc_url<\/code>\n* Link titles are sanitized and HTML-escaped\n* Meta registration includes capability and sanitization checks<\/p>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPLv2 or later.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to the <code>\/wp-content\/plugins\/<\/code> directory or install via WordPress admin<\/li>\n<li>Activate the plugin<\/li>\n<li>Go to any post or page and add keywords in the Linkable panel (in the sidebar)<\/li>\n<li>Configure plugin settings under <strong>Settings &gt; Linkable<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20it%20support%20custom%20post%20types%3F'><h3>Does it support custom post types?<\/h3><\/dt>\n<dd><p>Not yet, but it\u2019s on the roadmap.<\/p><\/dd>\n<dt id='does%20it%20work%20with%20shortcodes%20and%20existing%20links%3F'><h3>Does it work with shortcodes and existing links?<\/h3><\/dt>\n<dd><p>Yes \u2013 existing links and shortcodes are safely ignored during replacement.<\/p><\/dd>\n<dt id='does%20it%20slow%20down%20my%20site%3F'><h3>Does it slow down my site?<\/h3><\/dt>\n<dd><p>No \u2013 it uses transients and in-memory caching to keep things fast.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First public release<\/li>\n<li>Internal linking based on keywords<\/li>\n<li>Settings page with basic controls<\/li>\n<\/ul>","raw_excerpt":"Automatically link keywords in your content to internal pages or posts. Simple, fast, and Gutenberg-compatible.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/246656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=246656"}],"author":[{"embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/voiddk"}],"wp:attachment":[{"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=246656"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=246656"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=246656"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=246656"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=246656"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/twd.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=246656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}