{"id":346081,"date":"2026-08-22T17:11:18","date_gmt":"2026-08-22T17:11:18","guid":{"rendered":"https:\/\/ru.wordpress.org\/plugins\/kda-thumbnails\/"},"modified":"2026-08-22T19:40:47","modified_gmt":"2026-08-22T19:40:47","slug":"kda-thumbnails","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/kda-thumbnails\/","author":23530499,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.3","stable_tag":"1.3.3","tested":"7.0.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"KDA Thumbnails","header_author":"Denis K.","header_description":"Generate cached image thumbnails on the fly via shortcode or PHP functions. Supports GD and Imagick, WebP output, text\/image watermarks with Google Fonts and an outline mode.","assets_banners_color":"","last_updated":"2026-08-22 19:40:47","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/kda-thumbnails\/","header_author_uri":"https:\/\/github.com\/denisk-projects","rating":0,"author_block_rating":0,"active_installs":0,"downloads":59,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.1":{"tag":"1.3.1","author":"deniskey","date":"2026-08-22 17:11:00"},"1.3.2":{"tag":"1.3.2","author":"deniskey","date":"2026-08-22 17:29:44"},"1.3.3":{"tag":"1.3.3","author":"deniskey","date":"2026-08-22 19:40:47"}},"upgrade_notice":{"1.3.0":"<p>Added global output format, outline stroke width for text watermarks, fixed responsive tab visibility, and moved promotional content to a repository-hosted JSON file.<\/p>","1.2.0":"<p>Added Google Fonts and outline (stroke) watermark modes; fonts are now cached in uploads, not inside the plugin.<\/p>","1.0.0":"<p>Initial stable release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3660944,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3660944,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3660944,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.1","1.3.2","1.3.3"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings page with engine status and cache management.","2":"Watermark configuration (text, image, Google Fonts and outline mode).","3":"Responsive srcset settings.","4":"Debug &amp; docs tab with status and usage examples."}},"plugin_section":[],"plugin_tags":[3778,133,1326,3241,15376],"plugin_category":[50],"plugin_contributors":[272649],"plugin_business_model":[],"class_list":["post-346081","plugin","type-plugin","status-publish","hentry","plugin_tags-google-fonts","plugin_tags-image","plugin_tags-thumbnail","plugin_tags-watermark","plugin_tags-webp","plugin_category-media","plugin_contributors-deniskey","plugin_committers-deniskey"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/kda-thumbnails\/assets\/icon.svg?rev=3660944","icon":"https:\/\/ps.w.org\/kda-thumbnails\/assets\/icon.svg?rev=3660944","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>KDA Thumbnails<\/strong> creates resized, cached image thumbnails from the WordPress Media Library (or any local file) without touching your original uploads. Thumbnails are generated once, stored in a configurable cache folder, and served directly on subsequent requests.<\/p>\n\n<h4>How it works<\/h4>\n\n<p>The plugin works in two modes: <strong>zero-code<\/strong> (everything from the settings page) and <strong>developer mode<\/strong> (shortcodes, PHP functions, filters).<\/p>\n\n<p><strong>Zero-code mode (no programming required):<\/strong><\/p>\n\n<ol>\n<li>Go to <strong>Settings \u0432\u2020\u2019 KDA Thumbnails<\/strong>.<\/li>\n<li>Set the cache folder path (defaults to <code>wp-content\/uploads\/kda-thumbnails\/<\/code>).<\/li>\n<li>Choose the image library (Auto, Imagick, or GD).<\/li>\n<li>Configure the default output format (JPEG, PNG, or WebP) and quality (1-100).<\/li>\n<li>Optionally enable a watermark: choose between text and image, set color, opacity, position, font size, and font family (Google Fonts or a custom local .ttf\/.otf file).<\/li>\n<li>Optionally enable responsive srcset: specify a list of widths (e.g. 300, 768, 1200) and an optional <code>sizes<\/code> attribute.<\/li>\n<li>Optionally enable automatic content image caching: add CSS classes to the list, and the plugin will replace matching <code>&lt;img&gt;<\/code> tags in post content with optimized thumbnails.<\/li>\n<li>Optionally enable remote image caching: allow http(s) URLs as sources, with SSRF protection, TTL refresh, and max file size limit.<\/li>\n<\/ol>\n\n<p>That is it. The plugin takes care of the rest: generating thumbnails on first request, caching them, invalidating when the source changes, and enforcing a cache size quota if configured.<\/p>\n\n<p><strong>Developer mode (shortcodes and PHP):<\/strong><\/p>\n\n<ul>\n<li>Use the <code>[kdath_thumbnail]<\/code> shortcode in posts, pages, or widgets.<\/li>\n<li>Call PHP functions in theme templates or custom plugins.<\/li>\n<li>Hook into <code>the_content<\/code> to process all content images automatically.<\/li>\n<li>Use the custom field (<code>kdath_thumbs_url<\/code>) to store and retrieve thumbnail URLs.<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>On-the-fly thumbnail generation with <strong>GD<\/strong> or <strong>Imagick<\/strong> (auto-detected, or force a specific engine on the settings page).<\/li>\n<li>Output as <strong>JPG, PNG or WebP<\/strong>. Global default format setting applies to all thumbnails, including srcset variants.<\/li>\n<li>Smart caching with optional organization by post type (each post type gets its own subfolder). The cache folder can be any absolute server path or a subfolder inside <code>wp-content\/uploads\/<\/code>.<\/li>\n<li>Optional <strong>watermark<\/strong> \u0432\u0402\u201d text or image:\n\n<ul>\n<li><strong>Text watermark:<\/strong> custom text, color, opacity, position, and font size (in pixels or as a percentage of the smaller image side so it scales with the thumbnail).<\/li>\n<li><strong>Google Fonts:<\/strong> pick a font family from a curated list. The TrueType file is downloaded once and cached locally, then reused for every render. A custom local <code>.ttf<\/code>\/<code>.otf<\/code> path can be used instead.<\/li>\n<li><strong>Outline (stroke) mode:<\/strong> render the text with a colored outline (configurable width in pixels) for readability on any background.<\/li>\n<li><strong>Image watermark:<\/strong> overlay a selected Media Library image with configurable opacity.<\/li>\n<\/ul><\/li>\n<li>Shortcode <code>[kdath_thumbnail]<\/code> and PHP helper functions for theme and plugin developers.<\/li>\n<li><code>kdath_get_thumbnail_srcset( $args, $widths )<\/code> + <code>kdath_the_thumbnail_srcset()<\/code> for responsive srcset.<\/li>\n<li>Automatic caching of content images by CSS class (configurable list, applied via the <code>the_content<\/code> filter).<\/li>\n<li>Optional <strong>responsive srcset\/sizes<\/strong> generation: configure a list of widths, and the rendered <code>&lt;img&gt;<\/code> tag can include srcset with <code>wp<\/code>-style width descriptors and an optional sizes attribute. Works for plugin shortcodes\/PHP functions, content images, and native WordPress featured images.<\/li>\n<li>Optional <strong>remote image caching<\/strong> (opt-in, SSRF-protected, with TTL refresh and a max file size limit).<\/li>\n<li>Automatic <strong>cache size limit<\/strong>: the oldest thumbnails are purged automatically when the quota is exceeded.<\/li>\n<li>Lightweight admin page: engine status, cache size, font diagnostics and one-click cache clearing.<\/li>\n<li>Global <strong>output format<\/strong> setting (JPEG \/ PNG \/ WebP) applied to all generated thumbnails, including srcset variants.<\/li>\n<\/ul>\n\n<h4>Watermark font resolution<\/h4>\n\n<p>When a watermark is rendered the font is resolved in this order:<\/p>\n\n<ol>\n<li>The selected <strong>Google Font<\/strong> (downloaded once to <code>wp-content\/uploads\/kda-thumbnails-fonts\/&lt;family&gt;.ttf<\/code> and reused).<\/li>\n<li>A <strong>custom local font file<\/strong> path you provide in the settings.<\/li>\n<li>If neither is available, the text falls back to the engine's built-in\/best-effort font.<\/li>\n<\/ol>\n\n<p>The selected Google Font is downloaded on first use and cached, so the watermark always has a real font to render with (important for Imagick, which otherwise renders nothing when no font is configured). The \"Status\" panel on the settings page shows the resolved font and whether the Google Font has already been downloaded.<\/p>\n\n<h4>Shortcode<\/h4>\n\n<pre><code>[kdath_thumbnail id=\"123\" width=\"400\" height=\"300\" quality=\"90\" crop=\"center\" format=\"webp\" alt=\"Photo\"]\n<\/code><\/pre>\n\n<p>Shortcode parameters:<\/p>\n\n<ul>\n<li><code>id<\/code> \u0432\u0402\u201d Media Library attachment ID (integer).<\/li>\n<li><code>src<\/code> \u0432\u0402\u201d alternative to <code>id<\/code>: local file path or URL inside <code>wp-content\/uploads\/<\/code>. Remote URLs are only supported when remote caching is enabled; otherwise use a Media Library ID or local path.<\/li>\n<li><code>width<\/code> \u0432\u0402\u201d target width in pixels (integer).<\/li>\n<li><code>height<\/code> \u0432\u0402\u201d target height in pixels (integer).<\/li>\n<li><code>quality<\/code> \u0432\u0402\u201d JPEG\/WebP quality, 1-100 (default: 90 from settings).<\/li>\n<li><code>crop<\/code> \u0432\u0402\u201d crop mode: <code>top<\/code>, <code>bottom<\/code>, <code>left<\/code>, <code>right<\/code>, <code>center<\/code> (default: <code>center<\/code>).<\/li>\n<li><code>format<\/code> \u0432\u0402\u201d output format: <code>jpg<\/code>, <code>png<\/code>, <code>webp<\/code> (default: global \"Output format\" setting).<\/li>\n<li><code>alt<\/code> \u0432\u0402\u201d image alt text (string).<\/li>\n<li><code>class<\/code> \u0432\u0402\u201d extra CSS class(es) for the <code>&lt;img&gt;<\/code> tag (string).<\/li>\n<\/ul>\n\n<p>Shortcode return value: an <code>&lt;img&gt;<\/code> HTML tag with <code>src<\/code>, <code>width<\/code>, <code>height<\/code>, <code>alt<\/code>, <code>class<\/code>, and optional <code>srcset<\/code>\/<code>sizes<\/code>. On error returns empty string for non-admins, or an HTML comment with the error message for admins.<\/p>\n\n<h4>PHP functions<\/h4>\n\n<p>All functions are available after the plugin is activated.<\/p>\n\n<p><strong><code>kdath_get_thumbnail( $args )<\/code><\/strong><\/p>\n\n<p>Returns the cached thumbnail URL (<code>string<\/code>) or <code>WP_Error<\/code> on failure.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>$url = kdath_get_thumbnail( array( 'id' =&gt; 123, 'width' =&gt; 400, 'height' =&gt; 300 ) );\n<\/code><\/pre>\n\n<p><strong><code>kdath_the_thumbnail( $args )<\/code> \/ <code>kdath_the_thumbnail_src( $args )<\/code><\/strong><\/p>\n\n<p>Echoes the thumbnail URL directly. Same args as <code>kdath_get_thumbnail()<\/code>.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>kdath_the_thumbnail_src( array( 'id' =&gt; 123, 'width' =&gt; 400 ) );\n<\/code><\/pre>\n\n<p><strong><code>kdath_get_thumbnail_img( $args, $attributes )<\/code><\/strong><\/p>\n\n<p>Returns a complete <code>&lt;img&gt;<\/code> tag. <code>$attributes<\/code> is an array of extra HTML attributes (<code>class<\/code>, <code>loading<\/code>, <code>decoding<\/code>, <code>fetchpriority<\/code>, <code>style<\/code>, etc.). When \"Responsive srcset\" is enabled in settings, <code>srcset<\/code> and <code>sizes<\/code> are added automatically unless explicitly passed in <code>$attributes<\/code>.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>echo kdath_get_thumbnail_img(\n    array( 'id' =&gt; 123, 'width' =&gt; 400, 'height' =&gt; 300 ),\n    array( 'class' =&gt; 'my-custom-class', 'loading' =&gt; 'lazy' )\n);\n<\/code><\/pre>\n\n<p><strong><code>kdath_the_thumbnail_img( $args, $attributes )<\/code><\/strong><\/p>\n\n<p>Echoes the <code>&lt;img&gt;<\/code> tag. Useful inside theme templates.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>kdath_the_thumbnail_img( array( 'src' =&gt; '\/path\/to\/image.jpg', 'width' =&gt; 800, 'height' =&gt; 600, 'crop' =&gt; 'center' ), array( 'alt' =&gt; 'My photo' ) );\n<\/code><\/pre>\n\n<p><strong><code>kdath_get_thumbnail_srcset( $args, $widths )<\/code><\/strong><\/p>\n\n<p>Returns a srcset string (e.g. <code>\"url1 300w, url2 768w, url3 1200w\"<\/code>) or <code>WP_Error<\/code>. Generates one cached thumbnail per width.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>$srcset = kdath_get_thumbnail_srcset( array( 'id' =&gt; 123 ), array( 300, 768, 1200 ) );\n<\/code><\/pre>\n\n<p><strong><code>kdath_the_thumbnail_srcset( $args, $widths )<\/code><\/strong><\/p>\n\n<p>Echoes the srcset string.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>kdath_the_thumbnail_srcset( array( 'id' =&gt; 123 ), array( 300, 768, 1200 ) );\n<\/code><\/pre>\n\n<p><strong><code>kdath_get_thumbnail_url_from_meta( $post_id, $meta_key = '' )<\/code><\/strong><\/p>\n\n<p>Returns the thumbnail URL saved in the custom field configured in settings. Requires a Media Library attachment ID. If <code>$meta_key<\/code> is omitted, the globally configured field name is used.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>echo kdath_get_thumbnail_url_from_meta( 123 );\n<\/code><\/pre>\n\n<p><strong><code>kdath_the_thumbnail_url_from_meta( $post_id, $meta_key = '' )<\/code><\/strong><\/p>\n\n<p>Echoes the URL from the custom field.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>echo kdath_the_thumbnail_url_from_meta( 123 );\n<\/code><\/pre>\n\n<p><strong><code>KDATH_Thumbnail_Cache::clear_all()<\/code><\/strong><\/p>\n\n<p>Programmatically clear the entire cache. Useful after bulk imports or when you need to regenerate all thumbnails immediately.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>KDATH_Thumbnail_Cache::clear_all();\n<\/code><\/pre>\n\n<p><strong>Automatic content processing (no code required):<\/strong><\/p>\n\n<p>When the plugin is active, it automatically hooks into <code>the_content<\/code> and <code>post_thumbnail_html<\/code>. Images in post content that have one of the configured CSS classes (Settings \u0432\u2020\u2019 \"Classes for automatic caching\") are replaced with cached thumbnails. Featured images rendered by WordPress (including block themes like Twenty Twenty-Five) are also processed and can include srcset\/sizes automatically.<\/p>\n\n<p>If you prefer to apply this manually, use:<\/p>\n\n<pre><code>add_filter( 'the_content', function( $content ) {\n    return KDATH_Thumbnail_Content_Processor::process( $content );\n} );\n<\/code><\/pre>\n\n<p>This replaces standard <code>&lt;img&gt;<\/code> tags in post content with optimized thumbnails. Useful when you cannot edit theme templates directly.<\/p>\n\n<h4>Custom field for thumbnail URL<\/h4>\n\n<p>When <strong>\"Custom field for thumbnail URL\"<\/strong> (<code>kdath_thumbs_url<\/code>) is configured in Settings \u0432\u2020\u2019 KDA Thumbnails, the plugin automatically saves the generated thumbnail URL into that post meta key for every Media Library attachment. This is useful if you want to access the URL via <code>get_post_meta()<\/code> without calling the plugin functions again.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>update_post_meta( 123, 'kdath_thumbs_url', 'https:\/\/example.com\/wp-content\/uploads\/kda-thumbnails\/kdath_abc123_400x300.jpg' );\n\n\/\/ Retrieve later:\n$url = get_post_meta( 123, 'kdath_thumbs_url', true );\n\n\/\/ Or via helper:\necho kdath_the_thumbnail_url_from_meta( 123 );\n<\/code><\/pre>\n\n<h4>Settings reference<\/h4>\n\n<p>All settings are available under <strong>Settings \u0432\u2020\u2019 KDA Thumbnails<\/strong>. No code is required.<\/p>\n\n<p><strong>General tab:<\/strong><\/p>\n\n<ul>\n<li><strong>Cache folder path<\/strong> \u0432\u0402\u201d absolute server path or relative to <code>wp-content\/uploads\/<\/code>. Default: <code>kda-thumbnails<\/code>.<\/li>\n<li><strong>Cache folder URL<\/strong> \u0432\u0402\u201d public URL for the cache folder. Required when the path is outside the web root.<\/li>\n<li><strong>Custom field for thumbnail URL<\/strong> \u0432\u0402\u201d optional meta key name. When set, the plugin saves each generated thumbnail URL into this field for Media Library attachments.<\/li>\n<li><strong>Organize cache by post type<\/strong> \u0432\u0402\u201d saves thumbnails in subfolders per post type.<\/li>\n<li><strong>Classes for automatic caching<\/strong> \u0432\u0402\u201d comma-separated CSS classes. Images with these classes in post content are automatically replaced with cached thumbnails.<\/li>\n<li><strong>Image library<\/strong> \u0432\u0402\u201d choose GD, Imagick, or Auto.<\/li>\n<li><strong>Output format<\/strong> \u0432\u0402\u201d default format for generated thumbnails: JPEG, PNG, or WebP. Applies to all thumbnails, including srcset variants. Can be overridden per-request with the <code>format<\/code> parameter.<\/li>\n<li><strong>Default quality<\/strong> \u0432\u0402\u201d JPEG\/WebP quality from 1 to 100. Higher values produce larger files. Can be overridden per-request with the <code>quality<\/code> parameter.<\/li>\n<li><strong>Allow remote image sources<\/strong> \u0432\u0402\u201d enable caching of external http(s) image URLs.<\/li>\n<li><strong>Remote cache TTL (hours)<\/strong> \u0432\u0402\u201d how long a downloaded remote image stays fresh.<\/li>\n<li><strong>Max remote file size (MB)<\/strong> \u0432\u0402\u201d limit for remote downloads.<\/li>\n<\/ul>\n\n<p><strong>Watermark tab:<\/strong><\/p>\n\n<ul>\n<li><strong>Enable copyright watermark<\/strong> \u0432\u0402\u201d master switch.<\/li>\n<li><strong>Copyright type<\/strong> \u0432\u0402\u201d text or image.<\/li>\n<li><strong>Copyright text<\/strong> \u0432\u0402\u201d text for the watermark.<\/li>\n<li><strong>Copyright image<\/strong> \u0432\u0402\u201d URL or server path to an image file. Use the \"Select Image\" button to pick from the Media Library, or enter the full path manually.<\/li>\n<li><strong>Copyright color<\/strong> \u0432\u0402\u201d text color (hex).<\/li>\n<li><strong>Outline width<\/strong> \u0432\u0402\u201d stroke width in pixels around the text watermark. 0 = disabled.<\/li>\n<li><strong>Copyright opacity (0-100)<\/strong> \u0432\u0402\u201d transparency of the watermark.<\/li>\n<li><strong>Copyright position<\/strong> \u0432\u0402\u201d top-left, top-right, bottom-left, bottom-right, center.<\/li>\n<li><strong>Copyright font size<\/strong> \u0432\u0402\u201d size in pixels or percentage of the smaller image side.<\/li>\n<li><strong>Auto-fit watermark text<\/strong> \u0432\u0402\u201d automatically reduces font size so the text always fits inside the thumbnail width.<\/li>\n<li><strong>Custom font path<\/strong> \u0432\u0402\u201d absolute path to a <code>.ttf<\/code> or <code>.otf<\/code> font file.<\/li>\n<li><strong>Copyright Google Font<\/strong> \u0432\u0402\u201d pick from a curated list. Overrides the custom font path when set.<\/li>\n<\/ul>\n\n<p><strong>Responsive images tab:<\/strong><\/p>\n\n<ul>\n<li><strong>Responsive srcset<\/strong> \u0432\u0402\u201d generate <code>srcset<\/code> and <code>sizes<\/code> attributes automatically.<\/li>\n<li><strong>Srcset widths<\/strong> \u0432\u0402\u201d comma-separated widths in pixels. A thumbnail is generated for each width.<\/li>\n<li><strong>Sizes attribute<\/strong> \u0432\u0402\u201d optional HTML <code>sizes<\/code> attribute value. Leave empty to omit.<\/li>\n<\/ul>\n\n<p><strong>Cache management tab:<\/strong><\/p>\n\n<ul>\n<li><strong>Cache size limit (MB)<\/strong> \u0432\u0402\u201d 0 = unlimited. Oldest cached thumbnails are removed automatically when the limit is exceeded.<\/li>\n<li><strong>Cache size<\/strong> \u0432\u0402\u201d current total size of the cache folder.<\/li>\n<li><strong>Clear all cache<\/strong> \u0432\u0402\u201d delete all cached thumbnails.<\/li>\n<li><strong>Clear cache by post type<\/strong> \u0432\u0402\u201d when \"Organize cache by post type\" is enabled, clear individual post-type folders.<\/li>\n<\/ul>\n\n<p><strong>Debug &amp; docs tab:<\/strong><\/p>\n\n<ul>\n<li><strong>Status<\/strong> \u0432\u0402\u201d engine availability, cache directory, cached files count, watermark resource status.<\/li>\n<li><strong>Usage<\/strong> \u0432\u0402\u201d detailed reference for shortcodes, PHP functions, and cache management.<\/li>\n<\/ul>\n\n<h4>Notes<\/h4>\n\n<ul>\n<li>Generated thumbnails live under <code>wp-content\/uploads\/kda-thumbnails\/<\/code> by default (configurable via Settings \u0432\u2020\u2019 KDA Thumbnails).<\/li>\n<li>Downloaded Google Fonts live under <code>wp-content\/uploads\/kda-thumbnails-fonts\/<\/code>.<\/li>\n<li>A thumbnail is regenerated automatically when the source file's modification time changes, or when any watermark\/copyright setting changes (the cache key includes the full watermark configuration).<\/li>\n<li>The plugin does not modify original images in the Media Library. Only cached copies are created.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the GitHub API (<code>https:\/\/api.github.com<\/code>) to list the contents of the <code>google\/fonts<\/code> repository and locate the appropriate TrueType font files for the selected Google Font family. The font files are downloaded from GitHub's raw content delivery network and cached locally under <code>wp-content\/uploads\/kda-thumbnails-fonts\/<\/code>.<\/p>\n\n<p><strong>Data sent:<\/strong> The name of the selected Google Font family is included in the API URL path. No user-specific data is transmitted. Requests include a User-Agent header identifying the plugin.<\/p>\n\n<p><strong>Service provider:<\/strong> GitHub, Inc.<\/p>\n\n<p><strong>Terms of Service:<\/strong> https:\/\/docs.github.com\/site-policy\/github-terms\/github-terms-of-service\n<strong>Privacy Policy:<\/strong> https:\/\/docs.github.com\/site-policy\/privacy-policies\/github-privacy-statement<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>kda-thumbnails<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Go to <strong>Settings \u0432\u2020\u2019 KDA Thumbnails<\/strong> to configure the cache folder, engine and watermark.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20image%20library%20is%20used%3F\"><h3>Which image library is used?<\/h3><\/dt>\n<dd><p>The plugin auto-detects Imagick first, then falls back to GD. You can force a specific engine on the settings page. Both must be enabled in PHP.<\/p><\/dd>\n<dt id=\"are%20remote%20image%20urls%20supported%3F\"><h3>Are remote image URLs supported?<\/h3><\/dt>\n<dd><p>They are disabled by default. Enable \"Allow remote image sources\" on the settings page to cache external <code>http(s)<\/code> images. Remote fetching is protected against SSRF (only public IPs, default ports, no self-reference) and limited by a configurable max file size and TTL. Originals in the Media Library are still the recommended source.<\/p><\/dd>\n<dt id=\"which%20google%20fonts%20are%20available%2C%20and%20where%20do%20they%20come%20from%3F\"><h3>Which Google Fonts are available, and where do they come from?<\/h3><\/dt>\n<dd><p>A curated list is offered in the settings (Roboto, Open Sans, Lato, Montserrat, PT Sans, PT Serif, Oswald, Raleway, Merriweather, Roboto Condensed, Noto Sans, Ubuntu, Playfair Display, Titillium Web). The TrueType file is fetched from the public <code>google\/fonts<\/code> repository on GitHub, downloaded once, and cached locally under <code>wp-content\/uploads\/kda-thumbnails-fonts\/<\/code>. You can instead point the watermark at any local <code>.ttf<\/code>\/<code>.otf<\/code> file.<\/p><\/dd>\n<dt id=\"what%20does%20the%20%22outline%20width%22%20option%20do%3F\"><h3>What does the \"Outline width\" option do?<\/h3><\/dt>\n<dd><p>When set to a value greater than 0, the copyright text is drawn with a colored outline (stroke) around each letter. The outline width is in pixels. This keeps the text readable on both light and dark areas of a photo. Works with both GD and Imagick engines.<\/p><\/dd>\n<dt id=\"how%20does%20the%20cache%20size%20limit%20work%3F\"><h3>How does the cache size limit work?<\/h3><\/dt>\n<dd><p>Set \"Cache size limit (MB)\" to a value greater than 0. When the cache grows beyond the limit, the oldest cached thumbnails (by modification time) are removed automatically \u0432\u0402\u201d both on a daily cron and after new thumbnails are generated. Set 0 for unlimited.<\/p><\/dd>\n<dt id=\"how%20do%20i%20clear%20the%20cache%3F\"><h3>How do I clear the cache?<\/h3><\/dt>\n<dd><p>Use the \"Clear all cache\" button on the settings page, or clear individual post-type folders when \"Organize cache by post type\" is enabled. You can also call <code>KDATH_Thumbnail_Cache::clear_all()<\/code> programmatically.<\/p><\/dd>\n<dt id=\"will%20this%20modify%20my%20original%20images%3F\"><h3>Will this modify my original images?<\/h3><\/dt>\n<dd><p>Never. Originals in the Media Library are left untouched; only cached copies are created.<\/p><\/dd>\n<dt id=\"do%20i%20need%20to%20edit%20theme%20templates%20to%20use%20this%20plugin%3F\"><h3>Do I need to edit theme templates to use this plugin?<\/h3><\/dt>\n<dd><p>No. If you enable \"Classes for automatic caching\" and add the relevant CSS classes to the list, the plugin automatically replaces matching <code>&lt;img&gt;<\/code> tags in post content and featured images. For full control, use the shortcode or PHP functions in your templates.<\/p><\/dd>\n<dt id=\"can%20i%20use%20different%20formats%20for%20different%20thumbnails%3F\"><h3>Can I use different formats for different thumbnails?<\/h3><\/dt>\n<dd><p>Yes. The global \"Output format\" setting applies to all thumbnails by default, but you can override it per-request with the <code>format<\/code> parameter in the shortcode or PHP functions.<\/p><\/dd>\n<dt id=\"is%20webp%20supported%3F\"><h3>Is WebP supported?<\/h3><\/dt>\n<dd><p>Yes. WebP is supported for both output (when selected as the format) and as a source image (GD with <code>imagecreatefromwebp<\/code>, Imagick natively). The plugin checks for WebP support at runtime and falls back gracefully if the engine does not support it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Bug fixes.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Bug fixes.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Fixed readme Terms of Service and Privacy Policy URLs.<\/li>\n<li>Removed bundled translation files (.po\/.mo); the plugin now relies on translate.wordpress.org.<\/li>\n<li>Renamed public function\/class\/define\/shortcode\/option prefix from <code>kda_<\/code>\/<code>KDA_<\/code> to <code>kdath_<\/code>\/<code>KDATH_<\/code> to avoid conflicts with other plugins.<\/li>\n<li>Added backward-compatibility migration for previously stored options and post meta.<\/li>\n<li>Updated documentation\/examples to use the new function and shortcode names.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added responsive srcset\/sizes support: new helper functions <code>kdath_get_thumbnail_srcset()<\/code> and <code>kdath_the_thumbnail_srcset()<\/code>, and the rendered <code>&lt;img&gt;<\/code> tag can automatically include srcset when enabled in settings.<\/li>\n<li>Added <code>copyright_auto_fit<\/code> option \u0432\u0402\u201d automatically reduces the watermark font size if the text would overflow the thumbnail width.<\/li>\n<li>Added global \"Output format\" setting (JPEG \/ PNG \/ WebP) applied to all generated thumbnails, including srcset variants.<\/li>\n<li>Added <code>copyright_stroke<\/code> option \u0432\u0402\u201d outline (stroke) width for text watermarks, implemented for both GD and Imagick.<\/li>\n<li>Fixed responsive tab fields being hidden when watermark type is \"image\".<\/li>\n<li>Added missing admin fields: \"Default quality\" and \"Custom font path\".\n\n<ul>\n<li>Moved promotional content to a bundled <code>ads.json<\/code> file loaded from the plugin directory.<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added Google Fonts support for the text watermark: pick a family, it is downloaded once and cached locally.<\/li>\n<li>Added outline (stroke) mode for the text watermark \u0432\u0402\u201d transparent fill with a colored contour for readability on any background.<\/li>\n<li>Added font size in pixels or as a percentage of the image's smaller side.<\/li>\n<li>Downloaded fonts are now stored outside the plugin folder (in uploads), removing bundled fonts so the plugin is repository-friendly.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added opt-in remote image caching with SSRF protection, TTL refresh and max file size.<\/li>\n<li>Added automatic cache size limit (quota-based purge of oldest thumbnails).<\/li>\n<li>Added uninstall.php to clean up cache and options on plugin removal.<\/li>\n<li>Daily cron job enforces the cache size quota.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Cached thumbnail generation via shortcode and PHP functions.<\/li>\n<li>GD and Imagick support with JPG\/PNG\/WebP output.<\/li>\n<li>Text and image watermarking.<\/li>\n<li>Automatic caching of content images by CSS class.<\/li>\n<li>Admin cache management (clear all \/ by post type, size report).<\/li>\n<\/ul>","raw_excerpt":"Generate cached image thumbnails on the fly via shortcode or PHP functions. Supports GD, Imagick, WebP, and text\/image watermarks with Google Fonts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/346081","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=346081"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/deniskey"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=346081"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=346081"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=346081"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=346081"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=346081"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=346081"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}