{"id":373318,"date":"2026-09-22T12:49:48","date_gmt":"2026-09-22T12:49:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/svg-spritesheet-icons\/"},"modified":"2026-10-02T11:20:17","modified_gmt":"2026-10-02T11:20:17","slug":"safesprite-icons","status":"publish","type":"plugin","link":"https:\/\/pl.wordpress.org\/plugins\/safesprite-icons\/","author":23568593,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Safesprite Icons","header_author":"Kian Babaabady","header_description":"Secure icon library with footer SVG spritesheets. Does not enable Media Library SVG uploads.","assets_banners_color":"023e5f","last_updated":"2026-10-02 11:20:17","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/profiles.wordpress.org\/kianbabai09\/","header_plugin_uri":"","header_author_uri":"https:\/\/kianbabaabady.ir\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":177,"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":"kianbabai09","date":"2026-10-02 11:20:17","revision":3724655}},"upgrade_notice":{"1.0.0":"<p>First public release. Install and manage icons from Safesprite in wp-admin. Does not enable Media Library SVG uploads.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3711018,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3711018,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3711018,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3711018,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"safesprite\/icon":{"name":"safesprite\/icon","title":"SVG Icon"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3711018,"resolution":"1","location":"assets","locale":"","width":1133,"height":725},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3711018,"resolution":"2","location":"assets","locale":"","width":1138,"height":723},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3711018,"resolution":"3","location":"assets","locale":"","width":1134,"height":636},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3711018,"resolution":"4","location":"assets","locale":"","width":1520,"height":560},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3711018,"resolution":"5","location":"assets","locale":"","width":1128,"height":622}},"screenshots":{"1":"Collections screen  -  create and manage icon folders","2":"Icons library  -  upload, search, rename, and copy shortcodes","3":"Icon picker in the block editor","4":"Settings  -  upload size limit and uninstall data option","5":"Trash  -  restore items or permanently delete icons and collections"}},"plugin_section":[],"plugin_tags":[76538,148076,498,2904,147163],"plugin_category":[50],"plugin_contributors":[282049],"plugin_business_model":[],"class_list":["post-373318","plugin","type-plugin","status-publish","hentry","plugin_tags-elementor","plugin_tags-gutenberg","plugin_tags-icons","plugin_tags-svg","plugin_tags-svg-sprite","plugin_category-media","plugin_contributors-kianbabai09","plugin_committers-kianbabai09"],"banners":{"banner":"https:\/\/ps.w.org\/safesprite-icons\/assets\/banner-772x250.png?rev=3711018","banner_2x":"https:\/\/ps.w.org\/safesprite-icons\/assets\/banner-1544x500.png?rev=3711018","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/safesprite-icons\/assets\/icon-128x128.png?rev=3711018","icon_2x":"https:\/\/ps.w.org\/safesprite-icons\/assets\/icon-256x256.png?rev=3711018","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/safesprite-icons\/assets\/screenshot-1.png?rev=3711018","caption":"Collections screen  -  create and manage icon folders"},{"src":"https:\/\/ps.w.org\/safesprite-icons\/assets\/screenshot-2.png?rev=3711018","caption":"Icons library  -  upload, search, rename, and copy shortcodes"},{"src":"https:\/\/ps.w.org\/safesprite-icons\/assets\/screenshot-3.png?rev=3711018","caption":"Icon picker in the block editor"},{"src":"https:\/\/ps.w.org\/safesprite-icons\/assets\/screenshot-4.png?rev=3711018","caption":"Settings  -  upload size limit and uninstall data option"},{"src":"https:\/\/ps.w.org\/safesprite-icons\/assets\/screenshot-5.png?rev=3711018","caption":"Trash  -  restore items or permanently delete icons and collections"}],"raw_content":"<!--section=description-->\n<p>Safesprite Icons is a secure <strong>SVG icon library<\/strong> for WordPress that compiles used icons into a footer <strong>SVG spritesheet<\/strong> and renders them with lightweight <code>&lt;use&gt;<\/code> references  -  so you reuse brand icons without duplicating raw SVG markup on every page.<\/p>\n\n<p>Upload your own <strong>custom SVG icons<\/strong>, organize them in collections, sanitize every file on upload, and insert them with a shared <strong>icon picker<\/strong> in Gutenberg, Elementor, Classic Editor (TinyMCE), nav menus, shortcode, or PHP.<\/p>\n\n<h4>Why SVG sprites?<\/h4>\n\n<ul>\n<li>One spritesheet in the footer (<code>&lt;symbol&gt;<\/code> definitions) instead of repeating full SVG code<\/li>\n<li>Body output stays small: <code>&lt;svg&gt;&lt;use href=\"#...\"&gt;&lt;\/svg&gt;<\/code><\/li>\n<li>Better for performance when the same icons appear many times (menus, cards, loops)<\/li>\n<li>Site-owned assets only  -  no remote icon CDNs in v1<\/li>\n<\/ul>\n\n<h4>Security first<\/h4>\n\n<ul>\n<li>SVG uploads are accepted <strong>only<\/strong> through the plugin Icon Library<\/li>\n<li>This plugin does <strong>not<\/strong> enable SVG uploads in the WordPress Media Library (it is not a \u201cSafe SVG \/ SVG Support\u201d Media Library plugin)<\/li>\n<li>Uploads are sanitized with the vendored <code>enshrined\/svg-sanitize<\/code> library (GPL-2.0-or-later), shipped inside the plugin<\/li>\n<li>Front-end output uses sanitized <code>&lt;symbol&gt;<\/code> sprites + <code>&lt;use&gt;<\/code>  -  not raw uploaded files as <code>&lt;img src=\"....svg\"&gt;<\/code><\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Secure SVG icon library with collections (folders)<\/li>\n<li>Rename icon titles and collection names (slugs stay stable for shortcodes\/blocks)<\/li>\n<li>Trash \/ restore \/ permanent delete<\/li>\n<li>Shared icon picker across editors<\/li>\n<li>Gutenberg SVG icon block (size + color controls)<\/li>\n<li>Elementor SVG icon widget (loads only when Elementor is active)<\/li>\n<li>TinyMCE button<\/li>\n<li>Shortcode: <code>[sfsi_icon slug=\"my-icon\"]<\/code><\/li>\n<li>PHP helper: <code>sfsi_icon( 'my-icon' )<\/code><\/li>\n<li>Nav menu item icons<\/li>\n<li>Automatic footer SVG spritesheet compiler<\/li>\n<\/ul>\n\n<h4>For developers<\/h4>\n\n<ul>\n<li>Shortcode: <code>[sfsi_icon slug=\"my-icon\"]<\/code><\/li>\n<li>PHP helper: <code>sfsi_icon( 'my-icon' )<\/code> in themes or plugins<\/li>\n<li>Settings hooks: <code>sfsi_register_settings_fields<\/code> (action), <code>sfsi_sanitize_settings<\/code> (filter)<\/li>\n<\/ul>\n\n<h4>Who is this for?<\/h4>\n\n<ul>\n<li>Sites that need <strong>brand icons<\/strong> and custom SVGs without opening Media Library SVG uploads<\/li>\n<li>Developers who want <strong>SVG sprite<\/strong> \/ spritesheet rendering instead of heavy inline SVG bloat<\/li>\n<li>Teams using <strong>Gutenberg<\/strong> and\/or <strong>Elementor<\/strong> with one shared library<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>safesprite-icons<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the Plugins menu<\/li>\n<li>Open <strong>Safesprite<\/strong> in wp-admin, create a collection, upload SVGs<\/li>\n<li>Insert icons via block, shortcode, TinyMCE, menus, or Elementor<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20safe%20svg%20%2F%20media%20library%20svg%20plugin%3F\"><h3>Is this a Safe SVG \/ Media Library SVG plugin?<\/h3><\/dt>\n<dd><p>No. Safesprite does <strong>not<\/strong> allow SVG uploads in the Media Library. Icons live only in the plugin Icon Library, are sanitized on upload, and render via spritesheet + <code>&lt;use&gt;<\/code>.<\/p><\/dd>\n<dt id=\"does%20this%20create%20an%20svg%20sprite%20%2F%20spritesheet%3F\"><h3>Does this create an SVG sprite \/ spritesheet?<\/h3><\/dt>\n<dd><p>Yes. Icons used on a page are compiled into a single footer SVG spritesheet (<code>&lt;symbol&gt;<\/code> tags). Content references them with lightweight <code>&lt;use href=\"#...\"&gt;<\/code> markup.<\/p><\/dd>\n<dt id=\"can%20i%20use%20custom%20brand%20svg%20icons%20in%20elementor%20and%20gutenberg%3F\"><h3>Can I use custom brand SVG icons in Elementor and Gutenberg?<\/h3><\/dt>\n<dd><p>Yes. Upload icons in Safesprite, then pick them from the shared icon picker in the Gutenberg block or Elementor widget.<\/p><\/dd>\n<dt id=\"can%20i%20add%20svg%20icons%20to%20wordpress%20menus%3F\"><h3>Can I add SVG icons to WordPress menus?<\/h3><\/dt>\n<dd><p>Yes. Attach icons to nav menu items from Appearance \u2192 Menus.<\/p><\/dd>\n<dt id=\"is%20there%20a%20shortcode%3F\"><h3>Is there a shortcode?<\/h3><\/dt>\n<dd><p>Yes: <code>[sfsi_icon slug=\"my-icon\"]<\/code>. Developers can also use <code>sfsi_icon( 'my-icon' )<\/code> in PHP templates.<\/p><\/dd>\n<dt id=\"where%20are%20files%20stored%3F\"><h3>Where are files stored?<\/h3><\/dt>\n<dd><p>Sanitized SVG files live under <code>wp-content\/uploads\/safesprite-icons\/<\/code> with opaque filenames. Metadata is stored in plugin custom tables (not as custom post types).<\/p><\/dd>\n<dt id=\"what%20happens%20on%20uninstall%3F\"><h3>What happens on uninstall?<\/h3><\/dt>\n<dd><p>By default, data is kept. Enable \u201cDelete all plugin data on uninstall\u201d under Safesprite \u2192 Settings if you want tables and files removed.<\/p><\/dd>\n<dt id=\"what%20php%20extensions%20are%20required%3F\"><h3>What PHP extensions are required?<\/h3><\/dt>\n<dd><p>PHP 7.4+ with the <code>dom<\/code> and <code>libxml<\/code> extensions (used by the SVG sanitizer).<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First wordpress.org release candidate<\/li>\n<li>Secure Icon Library with sanitized uploads and footer spritesheets<\/li>\n<li>Gutenberg, Elementor, TinyMCE, Nav Menus, shortcode, and PHP helper<\/li>\n<li>Hardened SVG sanitization (no Media Library SVG enablement)<\/li>\n<\/ul>\n\n<h4>0.2.15<\/h4>\n\n<ul>\n<li>Security: strip SVG <code>&lt;style&gt;<\/code> \/ <code>style=<\/code> and remote hrefs after sanitize<\/li>\n<li>Performance: skip upload-dir ensure on front requests; memoize icon lookups<\/li>\n<li>Fix: nav menu icon meta no longer wiped on unrelated saves<\/li>\n<li>Packaging: exclude list moved to docs (no <code>.distignore<\/code> in plugin  -  Plugin Check)<\/li>\n<\/ul>\n\n<h4>0.2.14<\/h4>\n\n<ul>\n<li>Plugins list: Settings action link to Safesprite -&gt; Settings<\/li>\n<\/ul>\n\n<h4>0.2.13<\/h4>\n\n<ul>\n<li>Rename icon titles and collection names (slugs unchanged)<\/li>\n<li>Icon picker: search by title or slug<\/li>\n<li>Nav menus: icon preview and Clear control<\/li>\n<\/ul>\n\n<h4>0.2.12<\/h4>\n\n<ul>\n<li>Gutenberg editor: size and color preview match Elementor (no fixed admin tile CSS)<\/li>\n<\/ul>\n\n<h4>0.2.11<\/h4>\n\n<ul>\n<li>Elementor canvas: fix size slider and custom color live preview<\/li>\n<\/ul>\n\n<h4>0.2.10<\/h4>\n\n<ul>\n<li>Elementor editor: show inline icon preview (canvas has no footer spritesheet)<\/li>\n<\/ul>\n\n<h4>0.2.9<\/h4>\n\n<ul>\n<li>Elementor &amp; Gutenberg: visual icon picker, size slider (16-256px), inherit or custom color<\/li>\n<\/ul>\n\n<h4>0.2.8<\/h4>\n\n<ul>\n<li>Trash: bulk select, restore, and permanently delete icons and collections<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release candidate build<\/li>\n<\/ul>","raw_excerpt":"SVG icon library with secure uploads and automatic SVG spritesheets. Brand icons for Gutenberg and Elementor. No Media Library SVG.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/373318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=373318"}],"author":[{"embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kianbabai09"}],"wp:attachment":[{"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=373318"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=373318"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=373318"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=373318"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=373318"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pl.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=373318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}