{"id":364821,"date":"2026-09-07T07:39:47","date_gmt":"2026-09-07T07:39:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/article-relationship-graph-for-yarpp\/"},"modified":"2026-09-07T07:39:35","modified_gmt":"2026-09-07T07:39:35","slug":"article-relationship-graph-for-yarpp","status":"publish","type":"plugin","link":"https:\/\/fr.wordpress.org\/plugins\/article-relationship-graph-for-yarpp\/","author":9263475,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.15","stable_tag":"1.0.15","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Article Relationship Graph for YARPP","header_author":"Ignormatyk","header_description":"Adds an interactive graph of related articles below singular posts using YARPP's local table cache.","assets_banners_color":"","last_updated":"2026-09-07 07:39:35","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":26,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["installation","faq","changelog","description"],"tags":{"1.0.15":{"tag":"1.0.15","author":"xpil","date":"2026-09-07 07:39:35","revision":3684388}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.15"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[13224,2509,1089,18208,11164],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-364821","plugin","type-plugin","status-publish","hentry","plugin_tags-content-discovery","plugin_tags-graph","plugin_tags-related-posts","plugin_tags-visualization","plugin_tags-yarpp","plugin_committers-xpil"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/article-relationship-graph-for-yarpp.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=installation-->\n<ol>\n<li>Install and activate Yet Another Related Posts Plugin.<\/li>\n<li>In YARPP's settings, select the table-based cache.<\/li>\n<li>Upload the <code>article-relationship-graph-for-yarpp<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the ZIP from the Plugins screen.<\/li>\n<li>Activate Article Relationship Graph for YARPP.<\/li>\n<li>Open a supported singular post. The graph appears below the post content after graph data has been built.<\/li>\n<\/ol>\n\n<p>The first graph build is scheduled when the plugin is activated. On larger sites it may take some time to complete.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"why%20is%20no%20graph%20displayed%3F\"><h3>Why is no graph displayed?<\/h3><\/dt>\n<dd><p>Confirm that YARPP is active and configured to use its table cache. Then run <code>wp yarpp-graph rebuild<\/code> and check the result with <code>wp yarpp-graph status<\/code>.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20call%20an%20external%20service%3F\"><h3>Does this plugin call an external service?<\/h3><\/dt>\n<dd><p>No. The REST request, graph data, JavaScript, CSS, and D3.js library are served by your WordPress installation. No account, API key, or remote connection is required.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20number%20of%20nodes%3F\"><h3>Can I change the number of nodes?<\/h3><\/dt>\n<dd><p>The maximum is 15 nodes to keep public requests bounded. Developers can lower the limit with the <code>article_relationship_graph_node_limit<\/code> filter.<\/p><\/dd>\n<dt id=\"can%20i%20change%20the%20supported%20post%20types%3F\"><h3>Can I change the supported post types?<\/h3><\/dt>\n<dd><p>Yes. Developers can use the <code>article_relationship_graph_post_types<\/code> filter to provide the supported post types.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.15<\/h4>\n\n<ul>\n<li>Clarify narrowly scoped checker exceptions for generated SQL placeholders and local database operations.<\/li>\n<\/ul>\n\n<h4>1.0.14<\/h4>\n\n<ul>\n<li>Resolve the final prepared-query and direct-database checker findings with documented, narrowly scoped exceptions.<\/li>\n<\/ul>\n\n<h4>1.0.13<\/h4>\n\n<ul>\n<li>Resolve remaining prepared-query argument and checker compatibility findings.<\/li>\n<li>Document intentional direct database operations for local graph storage and cleanup.<\/li>\n<li>Update readme compatibility metadata for WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.0.12<\/h4>\n\n<ul>\n<li>Harden database queries with prepared table identifiers and value placeholders.<\/li>\n<li>Refine atomic lock updates and public graph lookups for plugin-check compatibility.<\/li>\n<li>Keep uninstall table cleanup explicit and limited to plugin-owned tables.<\/li>\n<li>Add the tested-up-to header and keep the short description within the directory limit.<\/li>\n<\/ul>\n\n<h4>1.0.11<\/h4>\n\n<ul>\n<li>Rename plugin display name.<\/li>\n<li>Release version 1.0.11.<\/li>\n<\/ul>\n\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Protect active graph generation on rebuild failures.<\/li>\n<li>Release version 1.0.10.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Bound public graph neighborhoods to fifteen nodes.<\/li>\n<li>Release version 1.0.9.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Resolve graph post types lazily.<\/li>\n<li>Release version 1.0.8.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Avoid no-op rebuild lock refresh failures.<\/li>\n<li>Release version 1.0.7.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Make rebuild lock ownership atomic.<\/li>\n<li>Release version 1.0.6.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Rebuild the graph when supported posts leave publication.<\/li>\n<li>Query edges only for surviving graph nodes.<\/li>\n<li>Release version 1.0.5.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Centralize graph post eligibility policy.<\/li>\n<li>Build client-safe graph API responses.<\/li>\n<li>Extract an ownership-aware rebuild lock.<\/li>\n<li>Report background rebuild outcomes.<\/li>\n<li>Validate graph REST request bounds.<\/li>\n<li>Release version 1.0.4.<\/li>\n<\/ul>\n\n<h4>Development history before 1.0.4<\/h4>\n\n<ul>\n<li>Initial import of the YARPP Article Graph plugin.<\/li>\n<li>Add an atomic plugin deployment workflow.<\/li>\n<li>Fix plugin version parsing in the deployer.<\/li>\n<li>Correct the deploy version header matcher.<\/li>\n<li>Add a portable PHP unit test foundation.<\/li>\n<\/ul>\n\n<!--section=description-->\n<p>Adds a symmetrical graph of YARPP-related articles below singular posts.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Displays a symmetrical, non-directional graph of related articles.<\/li>\n<li>Uses YARPP's table cache and respects the site's publicly viewable post types.<\/li>\n<li>Provides keyboard-friendly zoom controls and links to each article.<\/li>\n<li>Rebuilds graph data after supported posts are published and on a daily schedule.<\/li>\n<li>Includes a WP-CLI command for manual rebuilds and status checks.<\/li>\n<\/ul>\n\n<p>The graph is rendered locally in the browser with the included D3.js library. It does not send post content, visitor information, or analytics to an external service.<\/p>\n\n<h3>Requirements<\/h3>\n\n<p><a href=\"https:\/\/wordpress.org\/plugins\/yet-another-related-posts-plugin\/\">Yet Another Related Posts Plugin (YARPP)<\/a> must be active and configured to use its table cache.<\/p>\n\n<p>The plugin is an extension for YARPP and does not replace it. YARPP is a separate project and is not bundled with this plugin.<\/p>\n\n<h3>Rebuilding<\/h3>\n\n<p>The graph rebuilds daily and shortly after a new post is published. Rebuild manually with:<\/p>\n\n<p>wp yarpp-graph rebuild<\/p>\n\n<p>Inspect the most recent rebuild outcome with:<\/p>\n\n<p>wp yarpp-graph status<\/p>\n\n<p>The graph is capped at 15 nodes. Developers can lower the server-side limit with the article_relationship_graph_node_limit filter and can change supported post types with article_relationship_graph_post_types.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>This plugin does not collect, store, or transmit personal data. It does not use cookies, tracking pixels, third-party requests, or analytics. Graph data is generated from public WordPress posts and the local YARPP table cache.<\/p>\n\n<h3>Technical notes<\/h3>\n\n<p>Graph data is stored in two local custom database tables and is removed when the plugin is uninstalled. Deactivating the plugin preserves the tables so a later reactivation does not require data loss. The included D3.js library is distributed under its BSD 3-Clause license; see <code>assets\/vendor\/D3-LICENSE.txt<\/code>.<\/p>","raw_excerpt":"Adds a symmetrical graph of YARPP-related articles below singular posts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/364821","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=364821"}],"author":[{"embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/xpil"}],"wp:attachment":[{"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=364821"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=364821"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=364821"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=364821"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=364821"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/fr.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=364821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}