{"id":239069,"date":"2025-06-27T19:08:20","date_gmt":"2025-06-27T19:08:20","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/init-embed-posts\/"},"modified":"2026-08-05T05:00:53","modified_gmt":"2026-08-05T05:00:53","slug":"init-embed-posts","status":"publish","type":"plugin","link":"https:\/\/pcm.wordpress.org\/plugins\/init-embed-posts\/","author":14479633,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"2.0.0","stable_tag":"2.0.0","tested":"7.1","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"Init Embed Posts","header_author":"Init HTML","header_description":"Embed any WordPress post externally like a Twitter Card. No iframe, no shortcode \u2013 just pure magic.","assets_banners_color":"e44b48","last_updated":"2026-08-05 05:00:53","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/inithtml.com\/plugin\/init-embed-posts\/","header_author_uri":"https:\/\/inithtml.com\/","rating":5,"author_block_rating":0,"active_installs":80,"downloads":1556,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1":{"tag":"1.1","author":"brokensmile.2103","date":"2025-06-28 04:28:05"},"1.2":{"tag":"1.2","author":"brokensmile.2103","date":"2025-06-30 07:04:06"},"1.3":{"tag":"1.3","author":"brokensmile.2103","date":"2025-07-11 06:59:20"},"1.4":{"tag":"1.4","author":"brokensmile.2103","date":"2025-08-22 07:42:20"},"1.5":{"tag":"1.5","author":"brokensmile.2103","date":"2025-11-14 15:45:07"},"1.6":{"tag":"1.6","author":"brokensmile.2103","date":"2025-12-23 05:16:01"},"1.6.1":{"tag":"1.6.1","author":"brokensmile.2103","date":"2026-05-17 16:00:38"},"1.7":{"tag":"1.7","author":"brokensmile.2103","date":"2026-07-20 05:05:58"},"2.0.0":{"tag":"2.0.0","author":"brokensmile.2103","date":"2026-08-05 05:00:53"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3318945,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3318945,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3318945,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3318945,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"init-embed-posts\/embed-button":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"init-embed-posts\/embed-button","title":"Embed Button","category":"init-embed-posts","icon":"share","description":"Insert the \"Copy Embed Code\" button so visitors can grab an embeddable card for this post or product.","keywords":["embed","share","card","init"],"textdomain":"init-embed-posts","supports":{"html":false,"className":false,"customClassName":false,"align":false},"editorScript":"init-embed-posts-blocks-editor","style":"init-embed-ui","render":"file:.\/render.php"}},"tagged_versions":["1.1","1.2","1.3","1.4","1.5","1.6","1.6.1","1.7","2.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3324833,"resolution":"1","location":"assets","locale":"","width":696,"height":702},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3324833,"resolution":"2","location":"assets","locale":"","width":600,"height":594},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3318945,"resolution":"3","location":"assets","locale":"","width":420,"height":493},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3319721,"resolution":"4","location":"assets","locale":"","width":600,"height":688}},"screenshots":{"1":"Modal code generator","2":"Embed card \u2013 post","3":"Embed card \u2013 product","4":"Embed card \u2013 post with images"}},"plugin_section":[],"plugin_tags":[230,8479,23853,286,244228],"plugin_category":[56],"plugin_contributors":[242666],"plugin_business_model":[],"class_list":["post-239069","plugin","type-plugin","status-publish","hentry","plugin_tags-embed","plugin_tags-post-preview","plugin_tags-rest-api","plugin_tags-woocommerce","plugin_tags-wordpress-card","plugin_category-social-and-sharing","plugin_contributors-brokensmile2103-1","plugin_committers-brokensmile2103-1"],"banners":{"banner":"https:\/\/ps.w.org\/init-embed-posts\/assets\/banner-772x250.png?rev=3318945","banner_2x":"https:\/\/ps.w.org\/init-embed-posts\/assets\/banner-1544x500.png?rev=3318945","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/init-embed-posts\/assets\/icon-128x128.png?rev=3318945","icon_2x":"https:\/\/ps.w.org\/init-embed-posts\/assets\/icon-256x256.png?rev=3318945","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/init-embed-posts\/assets\/screenshot-1.png?rev=3324833","caption":"Modal code generator"},{"src":"https:\/\/ps.w.org\/init-embed-posts\/assets\/screenshot-2.png?rev=3324833","caption":"Embed card \u2013 post"},{"src":"https:\/\/ps.w.org\/init-embed-posts\/assets\/screenshot-3.png?rev=3318945","caption":"Embed card \u2013 product"},{"src":"https:\/\/ps.w.org\/init-embed-posts\/assets\/screenshot-4.png?rev=3319721","caption":"Embed card \u2013 post with images"}],"raw_content":"<!--section=description-->\n<p>Init Embed Posts lets you embed WordPress content externally \u2013 with beautiful cards, real-time REST API data, and zero friction.<\/p>\n\n<p>Instead of using iframes or clunky oEmbed, this plugin gives you clean <code>&lt;div&gt;<\/code> + <code>&lt;script&gt;<\/code> snippets, which load the post or product dynamically using WordPress REST API. Designed for speed, style, and full control \u2013 using pure JavaScript and smart caching.<\/p>\n\n<p>Prefer working in the Block Editor? The <strong>Embed Button<\/strong> block does exactly what the <code>[init_embed_code]<\/code> shortcode does \u2013 no shortcode needed if you'd rather insert it visually, with a live preview right in the editor.<\/p>\n\n<p>For AI agents and automated tools, embed data (title, excerpt, thumbnail, images, and \u2014 for WooCommerce products \u2014 price) is also exposed as a read-only <strong>Abilities API<\/strong> ability (WordPress 6.9+), the same data used to render the cards.<\/p>\n\n<p>This plugin is part of the <a href=\"https:\/\/en.inithtml.com\/init-plugin-suite-minimalist-powerful-and-free-wordpress-plugins\/\">Init Plugin Suite<\/a> \u2014 a collection of minimalist, fast, and developer-focused tools for WordPress.<\/p>\n\n<p>GitHub repository: <a href=\"https:\/\/github.com\/brokensmile2103\/init-embed-posts\">https:\/\/github.com\/brokensmile2103\/init-embed-posts<\/a><\/p>\n\n<p><strong>Features:<\/strong><\/p>\n\n<ul>\n<li>Embed any public post or WooCommerce product<\/li>\n<li>Works anywhere: raw HTML, CMS, blog, landing page\u2026<\/li>\n<li><strong>Block Editor block<\/strong>: \"Embed Button\", equivalent to <code>[init_embed_code]<\/code>, with a live preview in the editor<\/li>\n<li><strong>Abilities API (WordPress 6.9+)<\/strong>: read-only <code>get-embed-data<\/code> ability for post\/product embed data, discoverable via <code>wp_get_abilities()<\/code> and the <code>wp-abilities\/v1<\/code> REST namespace<\/li>\n<li>Beautiful card layout:\n\n<ul>\n<li>Site name + favicon<\/li>\n<li>Title, excerpt, date (for posts)<\/li>\n<li>Featured image, horizontal gallery (optional)<\/li>\n<li>Product name, price, sale price with strikethrough<\/li>\n<li>\"Add to cart\" styled button (optional)<\/li>\n<li>Auto dark mode, adapts to embedding site<\/li>\n<\/ul><\/li>\n<li>Hover effects and modern UI<\/li>\n<li>Skeleton loader while waiting for data<\/li>\n<li>JS-only, no iframe, no jQuery, no dependency<\/li>\n<li>Lazy-loads embed cards as they scroll into view<\/li>\n<li>Auto-detects embeds inserted dynamically after page load (AJAX\/SPA)<\/li>\n<li>Modal UI to generate personalized embed code<\/li>\n<li>Smart <code>&lt;script&gt;<\/code> switching:\n\n<ul>\n<li><code>init-embed.js<\/code> for posts<\/li>\n<li><code>init-embed-product.js<\/code> for Woo products<\/li>\n<\/ul><\/li>\n<li>Embed attributes:\n\n<ul>\n<li><code>data-theme=\"light|dark|auto\"<\/code> \u2013 force or auto-detect theme<\/li>\n<li><code>data-image<\/code>, <code>data-featured<\/code>, <code>data-cart<\/code> \u2013 control content<\/li>\n<\/ul><\/li>\n<li>Cached REST API (1 year, revalidated via ETag when the post\/product is updated)<\/li>\n<li>Price range display for WooCommerce variable products<\/li>\n<li>Configurable gallery image limit and default embed theme (Settings page)<\/li>\n<li>Developer filters to customize data and HTML<\/li>\n<\/ul>\n\n<h3>What's New in Version 2.0.0<\/h3>\n\n<ul>\n<li><strong>Block Editor support<\/strong>: new \"Embed Button\" block, equivalent to the <code>[init_embed_code]<\/code> shortcode, with a live editor preview \u2014 optional, the shortcode still works exactly as before<\/li>\n<li><strong>Abilities API support (WordPress 6.9+)<\/strong>: new read-only <code>init-embed-posts\/get-embed-data<\/code> ability for post\/product embed data \u2014 optional and fully backward-compatible on older WordPress versions<\/li>\n<li><strong>Requires at least<\/strong> raised from 5.5 to 6.9 to support the Abilities API. <code>Requires PHP<\/code> remains 7.4<\/li>\n<\/ul>\n\n<p>See full details in the changelog below.<\/p>\n\n<h3>Abilities API (WordPress 6.9+)<\/h3>\n\n<p>On WordPress 6.9 and above, Init Embed Posts registers one read-only ability under the <code>init-embed-posts<\/code> category:<\/p>\n\n<ul>\n<li><code>init-embed-posts\/get-embed-data<\/code> \u2014 returns embed data (title, excerpt, thumbnail, images, and \u2014 for WooCommerce products \u2014 price) for a published post or product, given an <code>id<\/code> and <code>type<\/code> (<code>post<\/code> or <code>product<\/code>)<\/li>\n<\/ul>\n\n<p>This is discoverable and executable via PHP (<code>wp_get_abilities()<\/code>), and \u2014 for sites that opt into exposing it \u2014 the <code>wp-abilities\/v1<\/code> REST namespace, using the exact same data as the REST endpoints below. This integration is fully optional: on WordPress versions older than 6.9, it silently does nothing and the rest of the plugin is unaffected.<\/p>\n\n<h3>Filters for Developers<\/h3>\n\n<p>These filters give you full control over how data is rendered and returned.<\/p>\n\n<p><strong>JS config override (highest priority):<\/strong><\/p>\n\n<ul>\n<li><p><code>window.InitPluginSuiteEmbedPostsConfig<\/code><br \/>\nSet this object before the page renders (e.g. via <code>wp_add_inline_script<\/code> in a theme) to override embed UI settings in JS, taking priority over the plugin's Settings page. Currently supports:<\/p>\n\n<ul>\n<li><code>theme<\/code> \u2013 <code>\"light\"<\/code>, <code>\"dark\"<\/code>, or <code>\"auto\"<\/code>. Overrides the \"Default embed theme\" setting for the embed code generator button\/modal.<\/li>\n<\/ul>\n\n<p>Example:\n  window.InitPluginSuiteEmbedPostsConfig = { theme: 'dark' };<\/p><\/li>\n<\/ul>\n\n<p><strong>REST response filters:<\/strong><\/p>\n\n<ul>\n<li><p><code>init_plugin_suite_embed_posts_rest_response<\/code><br \/>\nModify REST API response for posts.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_products_rest_response<\/code><br \/>\nModify REST API response for Woo products.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_posts_view_count_keys<\/code><br \/>\nCustomize the list of post meta keys used to detect view count. Supports array of meta keys, ordered by priority.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_posts_gallery_limit<\/code><br \/>\nOverride the gallery image limit (defaults to the Settings page value, 1\u201310) used for both post and product embeds.<\/p><\/li>\n<\/ul>\n\n<p><strong>Excerpt filters:<\/strong><\/p>\n\n<ul>\n<li><p><code>init_plugin_suite_embed_posts_excerpt<\/code><br \/>\nCustomize excerpt for posts.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_products_excerpt<\/code><br \/>\nCustomize excerpt for products.<\/p><\/li>\n<\/ul>\n\n<p><strong>Image control:<\/strong><\/p>\n\n<ul>\n<li><p><code>init_plugin_suite_embed_posts_images<\/code><br \/>\nFilter image list for embedded post.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_products_images<\/code><br \/>\nFilter image list for embedded product.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_posts_extracted_images<\/code><br \/>\nFilter raw image URLs extracted from post content.<\/p><\/li>\n<\/ul>\n\n<p><strong>Favicon:<\/strong><\/p>\n\n<ul>\n<li><p><code>init_plugin_suite_embed_posts_favicon_url<\/code><br \/>\nOverride favicon for posts.<\/p><\/li>\n<li><p><code>init_plugin_suite_embed_products_favicon_url<\/code><br \/>\nOverride favicon for products.<\/p><\/li>\n<\/ul>\n\n<p><strong>HTML output filters:<\/strong><\/p>\n\n<ul>\n<li><code>init_plugin_suite_embed_posts_shortcode_html<\/code><br \/>\nCustomize HTML output of the <code>[init_embed_code]<\/code> shortcode. Allows complete control over button markup, styling, and attributes.<\/li>\n<\/ul>\n\n<p><strong>Auto-insert locations:<\/strong><\/p>\n\n<ul>\n<li><code>init_embed_insert_locations<\/code><br \/>\nCustomize or filter valid auto-insert positions (e.g., after title, before content, etc).<\/li>\n<\/ul>\n\n<h3>License<\/h3>\n\n<p>This plugin is licensed under the GPLv2 or later.<br \/>\nYou are free to use, modify, and distribute it under the same license.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate this plugin.<\/li>\n<li>Use the <code>[init_embed_code]<\/code> shortcode \u2014 or the equivalent \"Embed Button\" block in the Block Editor \u2014 to show the \u201cCopy Embed Code\u201d button.<\/li>\n<li>Click the button \u2192 configure your embed \u2192 copy the code.<\/li>\n<li>Paste it anywhere: blog, site builder, static HTML, you name it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20use%20iframes%3F\"><h3>Does it use iframes?<\/h3><\/dt>\n<dd><p>No. It renders HTML via JS directly.<\/p><\/dd>\n<dt id=\"can%20i%20embed%20woocommerce%20products%3F\"><h3>Can I embed WooCommerce products?<\/h3><\/dt>\n<dd><p>Yes, as of v1.1. Just add <code>data-type=\"product\"<\/code> and use the new script.<\/p><\/dd>\n<dt id=\"is%20it%20fast%3F\"><h3>Is it fast?<\/h3><\/dt>\n<dd><p>Yes. The REST JSON response is cacheable via Cloudflare or CDN for up to 1 year, and includes an ETag so caches automatically revalidate and pick up fresh data as soon as the post or product is updated.<\/p><\/dd>\n<dt id=\"can%20i%20restyle%20the%20embed%20card%3F\"><h3>Can I restyle the embed card?<\/h3><\/dt>\n<dd><p>Yes. All styles are scoped. You can override with your own CSS.<\/p><\/dd>\n<dt id=\"can%20i%20disable%20auto-insert%20button%3F\"><h3>Can I disable auto-insert button?<\/h3><\/dt>\n<dd><p>Yes. Go to Settings \u2192 Init Embed Posts and uncheck all positions.<\/p><\/dd>\n<dt id=\"is%20there%20a%20block%20editor%20block%3F\"><h3>Is there a Block Editor block?<\/h3><\/dt>\n<dd><p>Yes. The \"Embed Button\" block (under the Init Embed Posts category) does exactly what the <code>[init_embed_code]<\/code> shortcode does, with a live preview in the editor \u2014 use whichever you prefer.<\/p><\/dd>\n<dt id=\"what%20is%20the%20abilities%20api%20and%20do%20i%20need%20it%3F\"><h3>What is the Abilities API and do I need it?<\/h3><\/dt>\n<dd><p>It's an optional WordPress 6.9+ feature that exposes this plugin's embed data as a discoverable, executable \"ability\" for AI agents and automation tools \u2014 the same data as the REST endpoints below. You don't need it for the plugin's normal embed features to work, and it does nothing on older WordPress versions.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.0 \u2013 August 05, 2026<\/h4>\n\n<ul>\n<li><strong>New: Block Editor (Gutenberg) support<\/strong>: new \"Embed Button\" block under its own <strong>Init Embed Posts<\/strong> block category (instead of the generic \"Widgets\" category), equivalent to the <code>[init_embed_code]<\/code> shortcode. Registered via <code>block.json<\/code> (with a PHP <code>render.php<\/code> file wired through the <code>\"render\"<\/code> field, WP 6.1+) that calls the exact same function as the shortcode \u2014 no duplicated display logic, output always matches. Editor integration is a single no-build-step vanilla JavaScript file using <code>wp.serverSideRender<\/code> for a live preview<\/li>\n<li><strong>New: Abilities API support (WordPress 6.9+)<\/strong>: registers one read-only ability, <code>init-embed-posts\/get-embed-data<\/code>, under the <code>init-embed-posts<\/code> category \u2014 returns the same embed data as the REST endpoints for a given post or product <code>id<\/code>. Discoverable and executable via PHP, <code>wp_get_abilities()<\/code>, and \u2014 when a site opts in \u2014 the <code>wp-abilities\/v1<\/code> REST namespace. Fully optional and backward-compatible: on WordPress versions older than 6.9, the integration silently does nothing<\/li>\n<li><strong>Changed<\/strong>: internal REST response building for <code>\/post\/{id}<\/code> and <code>\/product\/{id}<\/code> refactored into shared, reusable functions so the REST endpoints and the new Abilities API ability use the exact same data-building logic \u2014 no behavior change, same response shape as before<\/li>\n<li><strong>Changed<\/strong>: <code>Requires at least<\/code> raised from 5.5 to 6.9 to support the Abilities API integration. <code>Requires PHP<\/code> remains 7.4<\/li>\n<li><code>Tested up to: 7.1<\/code><\/li>\n<\/ul>\n\n<h4>1.7 \u2013 July 20, 2026<\/h4>\n\n<ul>\n<li>Fix stale embed cards: REST responses no longer use <code>immutable<\/code> caching; added <code>ETag<\/code> + <code>modified_at<\/code> (based on post\/product last-modified time) so browsers\/CDNs revalidate instead of serving year-old data after a post is edited<\/li>\n<li>Add lazy-loading for embed cards via <code>IntersectionObserver<\/code>: cards only fetch data when scrolled near the viewport<\/li>\n<li>Add public <code>scan()<\/code> API (<code>IEP_Embed.scan()<\/code> for posts, <code>IEP_EmbedProduct.scan()<\/code> for products) plus automatic <code>MutationObserver<\/code> support, so embeds inserted dynamically after page load (AJAX\/SPA) are picked up<\/li>\n<li>Escape title, excerpt, site name, and other dynamic fields before rendering to prevent HTML\/script injection in embed cards<\/li>\n<li>Add placeholder icon for product embeds when no thumbnail is available, instead of a broken image<\/li>\n<li>Add price range display (e.g. \"100.000\u20ab \u2013 150.000\u20ab\") for WooCommerce variable products with <code>price_min<\/code>\/<code>price_max<\/code> in the REST response<\/li>\n<li>Add new setting: gallery image limit (1\u201310), replacing the previous hard-coded limit of 5<\/li>\n<li>Add new setting: default embed theme, pre-selected in the embed code generator modal (<code>window.InitPluginSuiteEmbedPostsConfig.theme<\/code> still takes top priority when set by a theme\/site, falling back to this setting, then to <code>light<\/code>)<\/li>\n<\/ul>\n\n<h4>1.6 \u2013 December 23, 2025<\/h4>\n\n<ul>\n<li>Prevent duplicated <code>InitEmbedPostsSettings<\/code> output when shortcode is rendered multiple times on the same page  <\/li>\n<li>Ensure embed UI scripts and localized settings are loaded only once per request  <\/li>\n<li>Improve shortcode rendering stability when auto-injected at multiple locations  <\/li>\n<li>Minor internal optimization to reduce redundant processing during content rendering  <\/li>\n<\/ul>\n\n<h4>1.5 \u2013 November 14, 2025<\/h4>\n\n<ul>\n<li>Improved image extraction logic in REST response for more consistent embed visuals  <\/li>\n<li>Enhanced <code>init_plugin_suite_embed_posts_extract_images()<\/code> with URL sanitization, duplication checks, and safer handling of invalid sources  <\/li>\n<li>Ensured embed cards always return clean, valid image URLs and respect the requested limit  <\/li>\n<li>Minor REST performance refinements and internal hardening  <\/li>\n<li>Code cleanup for better long-term maintainability <\/li>\n<\/ul>\n\n<h4>1.4 \u2013 August 22, 2025<\/h4>\n\n<ul>\n<li>Add <code>init_embed_posts_shortcode_html<\/code> filter for customizing shortcode button HTML<\/li>\n<li>Allow developers to completely override embed button markup and styling<\/li>\n<li>Improved extensibility for theme and plugin developers<\/li>\n<\/ul>\n\n<h4>1.3 \u2013 July 9, 2025<\/h4>\n\n<ul>\n<li>Refactor embed modal: now fully rendered via JavaScript, no PHP template used<\/li>\n<li>Add two new toggle options in modal: \"Show post meta\" and \"Show review\"<\/li>\n<li>Post meta now displays published time, view count, and comment count with icons<\/li>\n<li>Review support: renders 5-star rating and average score if Init Review System is active<\/li>\n<li>Enhance REST API:\n\n<ul>\n<li>Add <code>comment_count<\/code>, <code>view_count<\/code>, and <code>review<\/code> data<\/li>\n<li>Support multiple view count plugins (Jetpack, WP-PostViews, WP Statistics, Post Views Counter)<\/li>\n<li>Allow custom view field via <code>init_plugin_suite_embed_posts_view_count_keys<\/code> filter<\/li>\n<\/ul><\/li>\n<li><code>published_at<\/code> now returns human-readable time difference (e.g. <code>2 days<\/code>) instead of ISO<\/li>\n<li>Minor UI adjustments and cleaner card layout<\/li>\n<\/ul>\n\n<h4>1.2 \u2013 June 30, 2025<\/h4>\n\n<ul>\n<li>Add <code>uninstall.php<\/code> to clean up settings on deletion  <\/li>\n<li>Change default theme from <code>auto<\/code> to <code>light<\/code> for better compatibility  <\/li>\n<\/ul>\n\n<h4>1.1 \u2013 June 14, 2025<\/h4>\n\n<ul>\n<li>Add support for WooCommerce product embeds  <\/li>\n<li>New REST endpoint: <code>\/product\/{id}<\/code>  <\/li>\n<li>Product embed supports featured image, price, sale price (with strikethrough), and dark mode  <\/li>\n<li>Auto-insert embed button after product meta (if enabled)  <\/li>\n<li>Embed code now includes <code>data-type<\/code> to switch JS logic  <\/li>\n<li>New embed script: <code>init-embed-product.js<\/code>  <\/li>\n<li>Cleaned up UI styles and fixed edge cases  <\/li>\n<\/ul>\n\n<h4>1.0 \u2013 June 9, 2025<\/h4>\n\n<ul>\n<li>Initial release  <\/li>\n<li>Embed any post with responsive card  <\/li>\n<li>Modal UI for embed code generation  <\/li>\n<li>REST API with cache-friendly headers  <\/li>\n<li>Vanilla JS \u2013 lightweight and dependency-free  <\/li>\n<li>Works anywhere, no iframe\/oEmbed needed<\/li>\n<\/ul>","raw_excerpt":"Embed WordPress posts or products anywhere \u2013 like a Twitter Card. No iframe. No oEmbed. Just pure JS, full control, and beautiful design.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/239069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=239069"}],"author":[{"embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/brokensmile2103-1"}],"wp:attachment":[{"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=239069"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=239069"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=239069"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=239069"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=239069"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pcm.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=239069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}