{"id":330233,"date":"2026-06-23T16:29:20","date_gmt":"2026-06-23T16:29:20","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/clouddy\/"},"modified":"2026-06-23T17:41:04","modified_gmt":"2026-06-23T17:41:04","slug":"clouddy","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/clouddy\/","author":20803481,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.5.4","stable_tag":"0.5.4","tested":"7.0","requires":"6.3","requires_php":"8.0","requires_plugins":null,"header_name":"Clouddy","header_author":"jac.las@gmail.com","header_description":"A visual tag cloud for WordPress.","assets_banners_color":"414ba5","last_updated":"2026-06-23 17:41:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/ksefgate.pl","rating":0,"author_block_rating":0,"active_installs":0,"downloads":31,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5.3":{"tag":"0.5.3","author":"jaclas","date":"2026-06-23 16:29:02"},"0.5.4":{"tag":"0.5.4","author":"jaclas","date":"2026-06-23 17:41:04"}},"upgrade_notice":{"0.5.4":"<p>Fixes the unstyled tag cloud preview in the block editor.<\/p>","0.5.3":"<p>Lowered the minimum requirements to WordPress 6.3 and PHP 8.0. Recommended for all users.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3583545,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3583545,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3583545,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3583545,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5.3","0.5.4"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[268577,863,609,91],"plugin_category":[57],"plugin_contributors":[268578],"plugin_business_model":[],"class_list":["post-330233","plugin","type-plugin","status-publish","hentry","plugin_tags-post_tag","plugin_tags-tag-cloud","plugin_tags-tags","plugin_tags-taxonomy","plugin_category-taxonomy","plugin_contributors-jaclas","plugin_committers-jaclas"],"banners":{"banner":"https:\/\/ps.w.org\/clouddy\/assets\/banner-772x250.png?rev=3583545","banner_2x":"https:\/\/ps.w.org\/clouddy\/assets\/banner-1544x500.png?rev=3583545","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/clouddy\/assets\/icon-128x128.png?rev=3583545","icon_2x":"https:\/\/ps.w.org\/clouddy\/assets\/icon-256x256.png?rev=3583545","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Clouddy renders a visual tag cloud (<code>post_tag<\/code> or any other taxonomy) with dynamic sizing\nand a smooth color transition based on tag popularity. Configuration is global; embed the\ncloud with a block, a widget, or a shortcode.<\/p>\n\n<p>Sizing and color are computed in PHP only as a normalized weight; the actual font size and\ncolor are produced in CSS (custom properties + <code>calc()<\/code> + <code>color-mix()<\/code>), so you can override\neverything with plain CSS \u2014 no <code>!important<\/code> needed.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Selection modes: most popular, rarest, random, and hybrid (some popular + some rare).<\/li>\n<li>Display orders independent of selection: by count, alphabetical, random, and \"lens\" orders\n(longest \/ most popular \/ rarest in the center).<\/li>\n<li>Exclusion blocklist, configurable taxonomy, adjustable size range and colors.<\/li>\n<li>Server-side cache (Transients) with invalidation on content and term changes.<\/li>\n<li>Clean, override-friendly HTML; accessible navigation container with an aria-label.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>clouddy<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin through the\nWordPress \"Plugins\" screen.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to Settings \u2192 Clouddy to configure the cloud (the configuration is global).<\/li>\n<li>Place the cloud with the <code>[clouddy]<\/code> shortcode, the Clouddy block, or the widget.<\/li>\n<li>To customize a single cloud, pass attributes to the shortcode (e.g. <code>[clouddy mode=\"hybrid\" number=\"40\"]<\/code>) \u2014 see the FAQ for the full list of supported attributes.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20change%20the%20tag%20sizes%3F\"><h3>How do I change the tag sizes?<\/h3><\/dt>\n<dd><p>In Settings \u2192 Clouddy set the minimum and maximum text size and the unit (rem\/em\/px). Each\ntag's size is interpolated between those values based on the tag's popularity.<\/p><\/dd>\n<dt id=\"can%20i%20style%20the%20cloud%20with%20my%20own%20css%3F\"><h3>Can I style the cloud with my own CSS?<\/h3><\/dt>\n<dd><p>Yes. The default stylesheet only sets custom properties on the container; every value can be\noverridden with regular CSS, and the default stylesheet can be dequeued entirely.<\/p><\/dd>\n<dt id=\"how%20do%20i%20embed%20the%20tag%20cloud%3F\"><h3>How do I embed the tag cloud?<\/h3><\/dt>\n<dd><p>Three ways, all rendering the same cloud from the global settings (Settings \u2192 Clouddy):<\/p>\n\n<ul>\n<li>Block \u2014 add the \"Clouddy \u2014 Tag Cloud\" block in the block editor.<\/li>\n<li>Shortcode \u2014 <code>[clouddy]<\/code> (accepts attributes, see below).<\/li>\n<li>Widget \u2014 the \"Clouddy \u2014 Tag Cloud\" classic widget (themes with widget areas).<\/li>\n<\/ul><\/dd>\n<dt id=\"which%20shortcode%20attributes%20are%20supported%3F\"><h3>Which shortcode attributes are supported?<\/h3><\/dt>\n<dd><p>Every attribute is optional and overrides the global setting for that single cloud, e.g. <code>[clouddy mode=\"hybrid\" number=\"40\" order=\"name_asc\"]<\/code>:<\/p>\n\n<ul>\n<li><code>mode<\/code> \u2014 which tags to include: <code>popular<\/code>, <code>rare<\/code>, <code>random<\/code>, <code>hybrid<\/code>. Default <code>popular<\/code>.<\/li>\n<li><code>number<\/code> \u2014 total number of tags (integer, min 1). Default <code>30<\/code>.<\/li>\n<li><code>order<\/code> \u2014 display order: <code>count_desc<\/code>, <code>count_asc<\/code>, <code>name_asc<\/code>, <code>name_desc<\/code>, <code>random<\/code>, <code>length_center<\/code>, <code>count_center<\/code>, <code>rare_center<\/code>. Default <code>count_desc<\/code>. The <code>*_center<\/code> orders place the top-ranked tags in the middle (lens effect).<\/li>\n<li><code>rare_count<\/code> \u2014 hybrid mode only: how many of the total are the rarest (integer, capped at <code>number<\/code>). Default <code>5<\/code>.<\/li>\n<li><code>taxonomy<\/code> \u2014 source taxonomy. Default <code>post_tag<\/code>.<\/li>\n<li><code>exclude<\/code> \u2014 comma-separated term IDs to skip, e.g. <code>exclude=\"12,34\"<\/code>.<\/li>\n<li><code>min_size<\/code> \/ <code>max_size<\/code> \u2014 smallest \/ largest text size (numbers). Defaults <code>0.8<\/code> \/ <code>2.0<\/code>.<\/li>\n<li><code>unit<\/code> \u2014 size unit: <code>rem<\/code>, <code>em<\/code>, <code>px<\/code>, <code>pt<\/code>. Default <code>rem<\/code>.<\/li>\n<li><code>color_a<\/code> \/ <code>color_b<\/code> \u2014 hex colors of the rarest \/ most popular tags. Defaults <code>#888888<\/code> \/ <code>#222222<\/code>.<\/li>\n<li><code>show_count<\/code> \u2014 append the post count to each tag (<code>true<\/code> \/ <code>false<\/code>). Default <code>false<\/code>.<\/li>\n<li><code>aria_label<\/code> \u2014 accessibility label for the cloud container. Default <code>Tag cloud<\/code>.<\/li>\n<li><code>ttl_minutes<\/code> \u2014 cache lifetime in minutes. Default <code>720<\/code> (12 h).<\/li>\n<\/ul><\/dd>\n<dt id=\"what%20is%20the%20cache%20lifetime%20%28ttl%29%20and%20what%20does%20it%20do%3F\"><h3>What is the cache lifetime (TTL) and what does it do?<\/h3><\/dt>\n<dd><p>Clouddy caches the set of tags it queries (using the WordPress Transients API) so the database\nis not queried on every page load. The cache lifetime (<code>ttl_minutes<\/code>) is how long that cached\nset is kept before it is rebuilt from the database \u2014 default 720 minutes (12 hours). It is only\na safety net: the cache is also refreshed automatically whenever content changes (a post is\nsaved or deleted, or tags are added, edited or removed). You rarely need to change it; lower it\nonly if you want a tighter upper bound on how stale the cloud can be.<\/p><\/dd>\n<dt id=\"the%20%22random%22%20order%20does%20not%20change%20on%20every%20page%20reload.%20why%3F\"><h3>The \"random\" order does not change on every page reload. Why?<\/h3><\/dt>\n<dd><p>The order is computed in PHP when the page is rendered \u2014 Clouddy uses no JavaScript. If you use\na full-page caching plugin or a CDN (for example LiteSpeed Cache, WP Super Cache, W3 Total\nCache, or a host\/CDN cache), the generated HTML \u2014 including that one random order \u2014 is stored\nand served to visitors, so the order only changes when that page cache is regenerated. This is\nexpected for any server-rendered random content. To reshuffle on every view despite caching you\nwould need client-side randomization (JavaScript), which Clouddy intentionally avoids. Either\nexclude that page from full-page caching, or accept that the order refreshes when the cache does.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.5.4<\/h4>\n\n<ul>\n<li>Fixed: the block editor preview is now styled correctly (tags are spaced and sized) \u2014 the stylesheet is also loaded in the editor, not only on the front end.<\/li>\n<\/ul>\n\n<h4>0.5.3<\/h4>\n\n<ul>\n<li>Lowered the minimum requirements to WordPress 6.3 and PHP 8.0.<\/li>\n<li>Documentation, readme and metadata cleanup in preparation for the WordPress.org plugin directory.<\/li>\n<\/ul>\n\n<h4>0.5.2<\/h4>\n\n<ul>\n<li>Hybrid mode fix: when the rare share is 0 (or equals the total number of tags), the cloud now respects the limit instead of fetching all tags.<\/li>\n<\/ul>\n\n<h4>0.5.1<\/h4>\n\n<ul>\n<li>The minimum and maximum text size fields now accept two decimal places (step 0.01).<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Internationalization: the interface base language is now English, with bundled Polish (pl_PL), French (fr_FR), German (de_DE) and Spanish (es_ES) translations. Added the Domain Path header.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Three new \"lens\" display orders: \"Longest in the center\" (by name length), \"Most popular in the center\" and \"Rarest in the center\" (by post count) \u2014 the chosen ranking in the middle, the rest toward both ends.<\/li>\n<li>Panel: the \"Random\" order option moved to the end of the list.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Settings panel: clearer field names and a hint for each option.<\/li>\n<li>Tag source (taxonomy) as a dropdown of registered taxonomies \u2014 no need to type the name from memory.<\/li>\n<li>Exclusion blocklist as a tag search by name with chips \u2014 no manual IDs.<\/li>\n<li>Cache lifetime given in minutes; the setting actually affects the cache TTL.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Split tag selection and display order into two independent settings (new \"Order\" field: by count, alphabetical, random).<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Plugin skeleton: bootstrap, autoload, lifecycle hooks.<\/li>\n<\/ul>","raw_excerpt":"Visual tag cloud, sized and colored by popularity, with many ordering modes. Add as a block, shortcode, or widget \u2014 fully stylable with CSS.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/330233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=330233"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/jaclas"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=330233"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=330233"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=330233"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=330233"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=330233"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=330233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}