{"id":311482,"date":"2026-05-12T20:43:04","date_gmt":"2026-05-12T20:43:04","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/4wp-smart-link\/"},"modified":"2026-05-12T20:51:21","modified_gmt":"2026-05-12T20:51:21","slug":"4wp-smart-link","status":"publish","type":"plugin","link":"https:\/\/tr.wordpress.org\/plugins\/4wp-smart-link\/","author":17741300,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.0.0","stable_tag":"1.0.0","tested":"6.9.4","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"4WP Smart Link","header_author":"4WP","header_description":"Smart Gutenberg blocks for advanced static and dynamic linking from blocks.","assets_banners_color":"","last_updated":"2026-05-12 20:51:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/4wp.dev\/","header_author_uri":"https:\/\/4wp.dev\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"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":"4wpdev","date":"2026-05-12 20:51:21"}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"forwp\/smart-link":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"forwp\/smart-link","version":"1.0.0","title":"4WP Smart Link","category":"widgets","icon":"admin-links","description":"Editor extensions for 4WP Smart Link on supported core blocks.","supports":{"html":false,"inserter":false},"textdomain":"4wp-smart-link","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[4121,6884,148076,537,213445],"plugin_category":[],"plugin_contributors":[262731,262732],"plugin_business_model":[],"class_list":["post-311482","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-cover","plugin_tags-gutenberg","plugin_tags-link","plugin_tags-query-loop","plugin_contributors-4wpdev","plugin_contributors-anatolikkk","plugin_committers-4wpdev"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/4wp-smart-link.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>4WP Smart Link<\/strong> adds inspector controls and toolbar shortcuts so editors can:<\/p>\n\n<ul>\n<li>Attach a custom URL to a Cover block output.<\/li>\n<li>Use a dynamic \u201ccurrent post\u201d permalink inside Query Loop contexts.<\/li>\n<\/ul>\n\n<p>Frontend markup wraps the rendered Cover block in a standards-compliant anchor when a URL resolves.<\/p>\n\n<h3>Frontend markup<\/h3>\n\n<p>When a link is output, the plugin wraps the Cover block with an <code>&lt;a&gt;<\/code> element:<\/p>\n\n<ul>\n<li>Base class: <code>forwp-smart-link-wrapper<\/code><\/li>\n<li>Block modifier (Cover): <code>forwp-smart-link-wrapper--cover<\/code><\/li>\n<li>Machine-readable hint: <code>data-forwp-smart-link=\"cover\"<\/code><\/li>\n<\/ul>\n\n<p>Themes may style <code>.forwp-smart-link-wrapper<\/code> globally or scope overrides per modifier.<\/p>\n\n<h3>Developer \/ pre-release checklist<\/h3>\n\n<p>Before uploading banners or screenshots:<\/p>\n\n<ul>\n<li>Manual QA in the block editor: custom URL, reset, dynamic \u201cPost Link\u201d inside a Query Loop, open-in-new-tab, nofollow \/ relation field, accessibility label.<\/li>\n<li>Frontend: confirm <code>&lt;a&gt;<\/code> <code>href<\/code>, <code>rel<\/code> when target is <code>_blank<\/code>, and no empty wrapper when URL resolves empty.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>wp-content\/plugins\/<\/code> or install the ZIP through <strong>Plugins \u2192 Add New<\/strong>.<\/li>\n<li>Activate <strong>4WP Smart Link<\/strong> through the Plugins screen.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20native%20cover%20linking%3F\"><h3>Does this replace native Cover linking?<\/h3><\/dt>\n<dd><p>Cover does not provide the same link semantics; <strong>4WP Smart Link<\/strong> layers an <code>&lt;a&gt;<\/code> wrapper server-side.<\/p><\/dd>\n<dt id=\"does%20it%20depend%20on%20other%204wp%20plugins%3F\"><h3>Does it depend on other 4WP plugins?<\/h3><\/dt>\n<dd><p>No. It runs standalone.<\/p><\/dd>\n<dt id=\"will%20the%20editor%20preview%20match%20the%20front%20end%3F\"><h3>Will the editor preview match the front end?<\/h3><\/dt>\n<dd><p>The link wrapper is applied on the <strong>front end<\/strong> only (via <code>render_block<\/code>). The block canvas does not wrap Cover in the same <code>&lt;a&gt;<\/code>, so spacing or theme link styles might differ slightly until you preview the published page.<\/p><\/dd>\n<dt id=\"accessibility%3A%20card-as-one-link%20pattern\"><h3>Accessibility: card-as-one-link pattern<\/h3><\/dt>\n<dd><p>Wrapping the whole Cover in an <code>&lt;a&gt;<\/code> is valid when inner blocks do <strong>not<\/strong> contain other links or interactive controls. Nested <code>&lt;a&gt;<\/code> elements are invalid HTML and hurt accessibility\u2014avoid links\/buttons inside a Cover that already has Smart Link enabled.<\/p><\/dd>\n<dt id=\"seo%20%60rel%60%20when%20opening%20in%20a%20new%20tab\"><h3>SEO `rel` when opening in a new tab<\/h3><\/dt>\n<dd><p>For <code>target=\"_blank\"<\/code> the plugin adds <code>noopener<\/code> and <code>noreferrer<\/code> to <code>rel<\/code> if missing, while preserving your <code>nofollow<\/code> and other tokens.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release with Cover block support (custom URL, dynamic Query Loop link, toolbar + inspector).<\/li>\n<li>Documented stable frontend classes (<code>forwp-smart-link-wrapper<\/code> + <code>--cover<\/code>, <code>data-forwp-smart-link<\/code>); editor uses <code>forwp-smart-link-cover-panel*<\/code> classes.<\/li>\n<li>Translation template: <code>languages\/4wp-smart-link.pot<\/code>.<\/li>\n<li>Frontend stylesheet for predictable <code>:focus-visible<\/code> on the link wrapper (<code>assets\/forwp-smart-link-frontend.css<\/code>).<\/li>\n<\/ul>","raw_excerpt":"Smart Gutenberg blocks for advanced static and dynamic linking from blocks.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/311482","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=311482"}],"author":[{"embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/4wpdev"}],"wp:attachment":[{"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=311482"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=311482"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=311482"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=311482"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=311482"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/tr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=311482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}