{"id":304910,"date":"2026-05-06T06:08:38","date_gmt":"2026-05-06T06:08:38","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/advanced-related-posts-display\/"},"modified":"2026-08-21T17:48:42","modified_gmt":"2026-08-21T17:48:42","slug":"zyonix-related-posts","status":"closed","type":"plugin","link":"https:\/\/bg.wordpress.org\/plugins\/zyonix-related-posts\/","author":23347110,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.6","stable_tag":"1.0.6","tested":"7.1","requires":"5.0","requires_php":"7.4","requires_plugins":null,"header_name":"Related Posts by Zyonix Digital","header_author":"Zyonix Digital","header_description":"Show related posts after your content. Supports grid\/list layouts, excerpt, date, read time, Load More, shortcode and widget.","assets_banners_color":"321968","last_updated":"2026-08-21 17:48:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/zyonixdigital.com\/plugins\/zyonix-related-posts\/","header_author_uri":"https:\/\/zyonixdigital.com\/","rating":5,"author_block_rating":0,"active_installs":0,"downloads":268,"num_ratings":2,"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":"archatok","date":"2026-05-06 06:12:56"},"1.0.1":{"tag":"1.0.1","author":"archatok","date":"2026-05-07 09:38:31"},"1.0.3":{"tag":"1.0.3","author":"archatok","date":"2026-05-07 10:03:11"},"1.0.6":{"tag":"1.0.6","author":"archatok","date":"2026-08-21 17:48:42"}},"upgrade_notice":{"1.0.6":"<p>Renames the plugin to \u201cRelated Posts by Zyonix Digital\u201d. Existing settings, shortcode, and Load More continue to work with no migration.<\/p>","1.0.5":"<p>Adds Query From vs Show On, custom taxonomy matching, relevance ordering, and ID caching. Existing settings keep working without opening the settings screen.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":[],"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3524001,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3524001,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.3","1.0.6"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"The related posts section displayed on a post \u2014 Grid layout.","2":"List layout with excerpt, date, and read time enabled.","3":"The Settings page \u2014 Display Settings panel.","4":"The Settings page \u2014 Content &amp; Meta toggles.","5":"The Settings page \u2014 Matching Logic panel."}},"plugin_section":[],"plugin_tags":[13224,261988,3668,1089,4572],"plugin_category":[],"plugin_contributors":[262153],"plugin_business_model":[],"class_list":["post-304910","plugin","type-plugin","status-closed","hentry","plugin_tags-content-discovery","plugin_tags-post-recommendations","plugin_tags-related-content","plugin_tags-related-posts","plugin_tags-similar-posts","plugin_contributors-archatok","plugin_committers-archatok"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/zyonix-related-posts_321968.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Related Posts by Zyonix Digital<\/strong> automatically shows related posts to your readers at the end of any post or page \u2014 helping you reduce bounce rates and keep visitors engaged longer.<\/p>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Category &amp; Tag Matching<\/strong> \u2014 Related posts share a category <strong>or<\/strong> a tag with the current post.<\/li>\n<li><strong>Optional Author Matching<\/strong> \u2014 When enabled, results must also be by the same author.<\/li>\n<li><strong>Custom Taxonomy Matching<\/strong> \u2014 Optionally match on public custom taxonomies attached to your query post types.<\/li>\n<li><strong>Show On \/ Query From<\/strong> \u2014 Choose which post types automatically display the section, and which types can appear as related results. Shortcode and widget still work on other public types.<\/li>\n<li><strong>Grid &amp; List Layouts<\/strong> \u2014 Choose the layout that fits your theme.<\/li>\n<li><strong>Order By<\/strong> \u2014 Latest, Most Commented, Random, or Relevance.<\/li>\n<li><strong>Deterministic Random<\/strong> \u2014 Random order uses a signed seed so Load More continues the same shuffled pool without repeats.<\/li>\n<li><strong>Relevance Ranking<\/strong> \u2014 Scores candidates by shared categories, tags, enabled custom taxonomies, overlap, and post type.<\/li>\n<li><strong>AJAX Load More<\/strong> \u2014 Load additional related posts without a page reload. Already-shown IDs are excluded on the server.<\/li>\n<li><strong>ID Caching<\/strong> \u2014 Related IDs are stored in transients (not HTML). Public\/published checks still run when posts are rendered.<\/li>\n<li><strong>Post Meta<\/strong> \u2014 Optionally show publish date and estimated reading time.<\/li>\n<li><strong>Excerpt Support<\/strong> \u2014 Show a short excerpt beneath each related post title.<\/li>\n<li><strong>Shortcode<\/strong> \u2014 Use <code>[zyonrp_related_posts]<\/code> anywhere in your content or widgets.<\/li>\n<li><strong>Widget Support<\/strong> \u2014 Drop the widget into any sidebar or footer area.<\/li>\n<li><strong>Thumbnail Size<\/strong> \u2014 Choose from Thumbnail, Medium, Medium Large, or Large.<\/li>\n<li><strong>Open in New Tab<\/strong> \u2014 Optionally open all related post links in a new tab.<\/li>\n<li><strong>Auto-Append Toggle<\/strong> \u2014 Disable auto-appending to content and use the shortcode instead.<\/li>\n<li><strong>Accessibility<\/strong> \u2014 Each card is a single link, with keyboard focus styles, Load More busy state, and a screen-reader live region.<\/li>\n<li><strong>Fully Sanitized &amp; Escaped<\/strong> \u2014 Built with WordPress security best practices throughout.<\/li>\n<\/ul>\n\n<h4>Shortcode Usage<\/h4>\n\n<p>Basic usage:\n    [zyonrp_related_posts]<\/p>\n\n<p>With options:\n    [zyonrp_related_posts count=\"3\" layout=\"list\" title=\"You May Also Like\"]<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.0+<\/li>\n<li>PHP 7.4+<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>zyonix-related-posts<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Go to <strong>Settings \u2192 Related Posts<\/strong> to configure the plugin.<\/li>\n<li>That's it! Related posts will now appear automatically after your post content.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"related%20posts%20are%20not%20showing%20up.%20what%20should%20i%20do%3F\"><h3>Related posts are not showing up. What should I do?<\/h3><\/dt>\n<dd><p>Go to <strong>Settings \u2192 Related Posts<\/strong> and make sure:\n1. The current post type is checked under \"Show Related Posts On\" if you rely on auto-append.\n2. \"Query Related Posts From\" includes the types you want as results.\n3. At least one matching source can apply: Category, Tag, Author, or a custom taxonomy with terms on the current post.\n4. \"Auto-append to Content\" is enabled \u2014 or place the <code>[zyonrp_related_posts]<\/code> shortcode \/ widget instead.<\/p><\/dd>\n<dt id=\"what%20is%20the%20difference%20between%20show%20on%20and%20query%20from%3F\"><h3>What is the difference between Show On and Query From?<\/h3><\/dt>\n<dd><p><strong>Show Related Posts On<\/strong> controls which singular post types automatically insert the related posts section after content.<\/p>\n\n<p><strong>Query Related Posts From<\/strong> controls which post types can appear as related results.<\/p>\n\n<p>The shortcode and widget do not consult \"Show Related Posts On\". They still only return posts from \"Query Related Posts From\".<\/p><\/dd>\n<dt id=\"how%20does%20matching%20work%3F\"><h3>How does matching work?<\/h3><\/dt>\n<dd><p>Category, tag, and enabled custom taxonomies are combined with <strong>OR<\/strong> (a post is related if it shares any of those). Author matching is optional and applied as <strong>AND<\/strong> when enabled.<\/p><\/dd>\n<dt id=\"can%20i%20show%20related%20posts%20manually%20instead%20of%20automatically%3F\"><h3>Can I show related posts manually instead of automatically?<\/h3><\/dt>\n<dd><p>Yes. Disable \"Auto-append to Content\" in the settings, then place the shortcode <code>[zyonrp_related_posts]<\/code> or the Related Posts widget wherever you want them to appear.<\/p><\/dd>\n<dt id=\"can%20i%20style%20the%20related%20posts%20section%20myself%3F\"><h3>Can I style the related posts section myself?<\/h3><\/dt>\n<dd><p>Yes. Add styles to your theme's stylesheet targeting <code>.zyonrp-related-posts<\/code>.<\/p><\/dd>\n<dt id=\"does%20it%20support%20custom%20post%20types%3F\"><h3>Does it support custom post types?<\/h3><\/dt>\n<dd><p>Yes. Public post types appear under both \"Show Related Posts On\" and \"Query Related Posts From\".<\/p><\/dd>\n<dt id=\"does%20it%20support%20custom%20taxonomies%3F\"><h3>Does it support custom taxonomies?<\/h3><\/dt>\n<dd><p>Yes. Public, queryable custom taxonomies attached to your Query From post types can be enabled under Matching Logic. Category and tag matching stay separate.<\/p><\/dd>\n<dt id=\"what%20does%20the%20shortcode%20support%3F\"><h3>What does the shortcode support?<\/h3><\/dt>\n<dd><p>[zyonrp_related_posts count=\"5\" layout=\"grid\" title=\"Related Posts\"]<\/p>\n\n<p>All three attributes are optional and fall back to your global settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Renamed the plugin to \u201cRelated Posts by Zyonix Digital\u201d.<\/li>\n<li>Preserved existing internal APIs, settings, shortcode, AJAX action, cache, and compatibility.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Documented Show On vs Query From, custom taxonomy matching, relevance ranking, and ID caching in the readme.<\/li>\n<li>Load More now rejects oversized signed-state (<code>cfg<\/code>) payloads before JSON decode.<\/li>\n<li>Split \"Show Related Posts On\" from \"Query Related Posts From\" (existing <code>zyonrp_post_types<\/code> still works until settings are saved).<\/li>\n<li>Optional matching on public custom taxonomies, combined with category\/tag using OR.<\/li>\n<li>New Relevance order: shared terms, overlap, and post type, with Load More over the ranked pool.<\/li>\n<li>Related IDs are cached in transients (not HTML); cache salt updates when published posts or matching terms change.<\/li>\n<li>Thumbnail meta is primed after ID hydration to avoid extra queries.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Load More now uses the same query contract as the first render, including shortcode count\/layout\/title overrides.<\/li>\n<li>Random + Load More continues from a seeded result pool and no longer switches to date order or repeats posts.<\/li>\n<li>Already displayed posts are excluded on the server, not only in the browser.<\/li>\n<li>Load More counts new items from the AJAX response instead of temporary DOM classes.<\/li>\n<li>Widget output no longer runs plugin HTML through wp_kses_post, which could strip the Load More button.<\/li>\n<li>Related post cards use a single link for accessibility.<\/li>\n<li>Excerpt ellipsis no longer renders as a literal HTML entity.<\/li>\n<li>Frontend CSS\/JS load only when related posts can render; JS loads only when Load More is enabled.<\/li>\n<li>Load More button exposes busy\/live-region state and restores its label after errors.<\/li>\n<li>Auto-append no longer duplicates when page builders re-run the_content or the shortcode is already present.<\/li>\n<li>Settings screen shows a success notice after save.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Critical fix: replaced get_the_excerpt() with direct post_excerpt\/post_content reading to prevent the_content filter chain firing on every related post item \u2014 the root cause of page load blocking.<\/li>\n<li>Fix: post meta cache re-enabled so has_post_thumbnail() and get_the_post_thumbnail() do not fire individual DB queries per post.<\/li>\n<li>Fix: post_content_cache now built for both read_time and excerpt, not just read_time.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Performance fix: plugin no longer runs an unrestricted WP_Query when a post has no category\/tag assigned, which caused slowdowns on large sites.<\/li>\n<li>Performance fix: added update_post_meta_cache and update_post_term_cache=false to avoid unnecessary DB queries.<\/li>\n<li>Performance fix: permalink now cached per post item instead of fetched twice.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed Load More \"has_more\" logic that caused the button to never hide.<\/li>\n<li>Security: validate post status and password protection in AJAX handler.<\/li>\n<li>Performance: PHP shuffle pool fetch avoids ORDER BY RAND() full table scan.<\/li>\n<li>Performance: post content cache avoids N+1 DB queries for read-time calculation.<\/li>\n<li>Security: post types validated against registered public types on every request.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Grid and List layout options.<\/li>\n<li>Excerpt, publish date, and estimated read time display options.<\/li>\n<li>AJAX-powered \"Load More\" button.<\/li>\n<li>Shortcode <code>[zyonrp_related_posts]<\/code> with count, layout, and title attributes.<\/li>\n<li>WordPress Widget support.<\/li>\n<li>Order By option (Latest, Most Commented, Random).<\/li>\n<li>Thumbnail size selector.<\/li>\n<li>Open links in new tab option.<\/li>\n<li>Auto-append to content toggle.<\/li>\n<li>Default options set on plugin activation.<\/li>\n<li>Full input sanitization, validation, and escaping per WordPress coding standards.<\/li>\n<\/ul>","raw_excerpt":"Show related posts after your content. Supports grid\/list layouts, excerpt, date, read time, Load More, shortcode and widget.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/304910","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=304910"}],"author":[{"embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/archatok"}],"wp:attachment":[{"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=304910"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=304910"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=304910"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=304910"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=304910"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bg.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=304910"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}