{"id":364168,"date":"2026-10-28T18:03:30","date_gmt":"2026-10-28T18:03:30","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wpgraft-copy-any-web-page-into-your-page-builder\/"},"modified":"2026-10-28T18:03:08","modified_gmt":"2026-10-28T18:03:08","slug":"wpgraft","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wpgraft\/","author":23554174,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.5","stable_tag":"1.2.5","tested":"7.1.4","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"WPGraft \u2013 Copy any web page into your page builder","header_author":"Sasa Gugunovic","header_description":"Connection plugin for the WPGraft browser extension. Imports copied pages and inserts them into Gutenberg, Elementor (v3, v4), Bricks, Breakdance, Oxygen 6, Oxygen Classic, Divi 5 and Beaver Builder from a panel inside the editor, and imports assets into the Media Library.","assets_banners_color":"cdcbc9","last_updated":"2026-10-28 18:03:08","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpgraft.com","header_author_uri":"https:\/\/sasagugunovic.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":75,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.5":{"tag":"1.2.5","author":"sasagugunovic","date":"2026-10-28 18:03:08","revision":3771313}},"upgrade_notice":{"1.2.5":"<p>Code-quality fixes from the WordPress.org review; no change in what a copy looks like.<\/p>","1.2.4":"<p>Stylesheets in copies are now rebuilt from an allowlist of standard CSS; the editor runtime loads as a script file.<\/p>","1.2.3":"<p>Adds one-click insert from the wpgraft section Library on wpgraft.com.<\/p>","1.2.2":"<p>Closing the panel no longer leaves an old rating card in front of the next copy&#039;s Insert button.<\/p>","1.2.1":"<p>Required for Elementor 4.3: without it every copy is refused with &quot;title: invalid_value&quot;.<\/p>","1.0.2":"<p>Direct-download build only.<\/p>","1.0.1":"<p>Hardening: script, PHP and invalid CSS are stripped from every copy for every user.<\/p>","1.0.0":"<p>First stable release.<\/p>","0.1.2":"<p>Adds Beaver Builder and Divi 5, and stops duplicate media on re-import.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3771313,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3771313,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3771313,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3771313,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3771313,"resolution":"1","location":"assets","locale":"","width":1280,"height":800},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3771313,"resolution":"2","location":"assets","locale":"","width":1280,"height":800},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3771313,"resolution":"3","location":"assets","locale":"","width":1280,"height":800}},"screenshots":{"1":"The copied section inside your builder's own editor \u2014 a real section with\nreal fields, editable like anything you built by hand.","2":"How a section gets from their page to yours: point at it, wpgraft rebuilds\nit into your builder's format, this plugin drops it into your open editor.","3":"Picking the section on the source page with the browser extension."}},"plugin_section":[],"plugin_tags":[148857,2814,2738,87,1084],"plugin_category":[59],"plugin_contributors":[289300],"plugin_business_model":[],"class_list":["post-364168","plugin","type-plugin","status-publish","hentry","plugin_tags-block-editor","plugin_tags-clone","plugin_tags-copy","plugin_tags-import","plugin_tags-page-builder","plugin_category-utilities-and-tools","plugin_contributors-sasagugunovic","plugin_committers-sasagugunovic"],"banners":{"banner":"https:\/\/ps.w.org\/wpgraft\/assets\/banner-772x250.png?rev=3771313","banner_2x":"https:\/\/ps.w.org\/wpgraft\/assets\/banner-1544x500.png?rev=3771313","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wpgraft\/assets\/icon-128x128.png?rev=3771313","icon_2x":"https:\/\/ps.w.org\/wpgraft\/assets\/icon-256x256.png?rev=3771313","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wpgraft\/assets\/screenshot-1.png?rev=3771313","caption":"The copied section inside your builder's own editor \u2014 a real section with\nreal fields, editable like anything you built by hand."},{"src":"https:\/\/ps.w.org\/wpgraft\/assets\/screenshot-2.png?rev=3771313","caption":"How a section gets from their page to yours: point at it, wpgraft rebuilds\nit into your builder's format, this plugin drops it into your open editor."},{"src":"https:\/\/ps.w.org\/wpgraft\/assets\/screenshot-3.png?rev=3771313","caption":"Picking the section on the source page with the browser extension."}],"raw_content":"<!--section=description-->\n<p>wpgraft copies a section of any public web page and rebuilds it inside your own\npage builder \u2014 Elementor, the block editor (Gutenberg), Divi, Bricks, Beaver\nBuilder, Breakdance or Oxygen \u2014 not as an embedded screenshot, not as a block of\npasted HTML, but as the builder's own elements, with the styles written into the\nbuilder's own fields. Once it lands you edit it the way you edit anything else\nyou built by hand.<\/p>\n\n<p>This plugin is the WordPress half of that. The copying happens in the wpgraft\nbrowser extension; this plugin receives the result, shows it in a panel inside\nthe editor, inserts it into the page you have open, and pulls the images it needs into\nyour Media Library.<\/p>\n\n<p><strong>Supported editors<\/strong><\/p>\n\n<ul>\n<li>Block editor (WordPress core)<\/li>\n<li>Elementor \u2014 both the classic (v3) and the atomic (v4) document models<\/li>\n<li>Bricks<\/li>\n<li>Divi 5<\/li>\n<li>Beaver Builder<\/li>\n<li>Breakdance<\/li>\n<li>Oxygen 6 and Oxygen Classic<\/li>\n<\/ul>\n\n<p><strong>What the plugin itself does<\/strong><\/p>\n\n<ul>\n<li>Adds a wpgraft panel inside the editor listing sections waiting to be inserted.<\/li>\n<li>Inserts a section into the open document using each builder's own data\nstructures, so the result is editable natively \u2014 no shortcode, no iframe, no\n\"do not edit this block\" wrapper.<\/li>\n<li>Imports the images a section needs into the Media Library and rewrites the\nreferences to point at your own copies, so the layout does not break when the\nsource site changes.<\/li>\n<li>Loads a copied page's typeface from Google Fonts by name (or the closest Google\nfont when the original is not there) instead of copying the source site's font\nfiles. The exceptions are fonts the copy itself embeds: icon fonts, and the\nembedded faces of a block-editor copy, which are stored in your uploads.<\/li>\n<li>Registers REST routes under <code>wpgraft\/v1<\/code>, each one gated on both a capability\ncheck and the <code>wp_rest<\/code> nonce.<\/li>\n<\/ul>\n\n<p><strong>What it will never insert<\/strong><\/p>\n\n<p>The plugin has no code editor, no CSS box and no field where anyone types code.\nWhat arrives is a page description the conversion service produced; before any\nof it is stored the plugin removes every <code>script<\/code> element, event-handler\nattribute and PHP open tag, and empties every JavaScript field a builder element\nmay have. Every stylesheet in it is parsed and rebuilt from an allowlist: a\ndeclaration is kept only when its property is a standard CSS property and its\nvalue is made of standard CSS values and functions, a selector only when it is\nmade of selector syntax, an at-rule only when it is one of a short list\n(<code>@media<\/code>, <code>@supports<\/code>, <code>@font-face<\/code>, <code>@keyframes<\/code>, \u2026), and <code>url()<\/code> only for\nhttp(s), image and font addresses. Everything else is dropped and reported, and\nno markup character survives in a stored stylesheet. That happens for every\nuser, administrators included, because the content was copied off somebody\nelse's page. On top of that, page-level CSS is only stored\nfor users who hold <code>edit_css<\/code> or <code>unfiltered_html<\/code> \u2014 the capability WordPress\nitself requires for Additional CSS \u2014 and raw-HTML builder elements are only\nkept for users who hold <code>unfiltered_html<\/code>; everyone else gets the section with\nthose parts removed and a warning saying so. Styles are written into each\nbuilder's own fields, so you edit them where you edit everything else.<\/p>\n\n<p><strong>What it does not do<\/strong><\/p>\n\n<p>No account to connect here, no licence key, no options page to fill in \u2014 the\nsettings screen is a status readout and nothing else. Nothing in this plugin is\nmetered, counted, time-limited or held back for a paid plan: there is no licence\ncheck anywhere in the code, no usage counter and no upgrade prompt. It inserts\nwhatever the extension hands it, on any site, for as long as you keep it\ninstalled. It reads no visitor data and writes nothing to your pages that you\ndid not insert yourself. What it stores: the queue of sections waiting to be\ninserted (per user, removed on insert or discard), the images and embedded\nfonts a copy brings (Media Library and uploads), and the styling of inserted\ncopies in post meta and the builder's own settings.<\/p>\n\n<p><strong>Requires a paid wpgraft plan (an external service)<\/strong><\/p>\n\n<p>This plugin is free software and always will be, but on its own it does nothing:\nsections reach it from the wpgraft browser extension, and the extension converts\na captured page through the wpgraft conversion service. That service is paid:\ncopying requires a wpgraft account with a paid plan \u2014 Pro monthly, Pro yearly or\nLifetime. There is no free tier and no trial. Plans and prices are at\nhttps:\/\/wpgraft.com\/#pricing. The plan is checked there \u2014 in the browser\nextension and on our server, before anything reaches WordPress \u2014 never by this\nplugin. See the section below for exactly what is sent where.<\/p>\n\n<p><strong>Not affiliated with<\/strong> Elementor, Bricks, Elegant Themes (Divi), Beaver\nBuilder, Soflyy (Oxygen, Breakdance) or any other builder vendor. Those names\nappear here to describe compatibility, and they belong to their owners.<\/p>\n\n<p><strong>Bundled resources.<\/strong> The plugin ships the Cooper Hewitt typeface\n(<code>assets\/fonts\/<\/code>), used only for the wordmark on its own settings screen, under\nthe SIL Open Font License 1.1 \u2014 the full text is in\n    assets\/fonts\/LICENSE-OFL.txt. Everything else in the plugin is GPLv2 or later.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin is a companion to the wpgraft browser extension and the wpgraft\nconversion service, operated by wpgraft (https:\/\/wpgraft.com).<\/p>\n\n<p><strong>1. The wpgraft conversion service \u2014 used by the extension, not by this plugin.<\/strong>\nWhen you copy a section, the browser extension sends the captured HTML and CSS\nof the page you chose to <code>https:\/\/wpgraft.com\/api\/convert<\/code>, together with your\naccount token, and receives the builder document that this plugin then inserts.\nThat request is made by the extension in your browser. This plugin does not make\nit and does not hold your account credentials. Sections picked in the wpgraft\nsection Library (https:\/\/wpgraft.com\/library) arrive the same way, through the\nextension. The service is paid: it converts only for accounts with a paid\nwpgraft plan (Pro monthly, Pro yearly or Lifetime); there is no free tier.<\/p>\n\n<ul>\n<li><p>Plans and prices: https:\/\/wpgraft.com\/#pricing<\/p><\/li>\n<li><p>Terms: https:\/\/wpgraft.com\/terms<\/p><\/li>\n<li>Privacy policy: https:\/\/wpgraft.com\/privacy<\/li>\n<\/ul>\n\n<p><strong>2. Downloading the assets a copied section uses.<\/strong> When a section references\nimages, your WordPress site downloads them from the URLs the\ncapture recorded \u2014 usually the site you copied from \u2014 and stores them in your\nMedia Library. That traffic goes from your server to that site directly; it\ndoes not pass through wpgraft. Only users who can already upload files can\ntrigger it. A file is accepted by its own bytes, not its name: raster images,\nweb fonts, and SVG \u2014 every SVG is rebuilt by a sanitizer that removes scripts,\nevent handlers and external references before it is stored. An image that is\nnot imported (the import was switched off, or it failed) keeps its original\naddress, so your visitors' browsers load it from the site it was copied from.<\/p>\n\n<p><strong>3. The quality rating \u2014 only if you fill it in and press the button.<\/strong> After a\ncopy is inserted, the panel asks how it turned out: a score from 1 to 5, an\noptional comment, and a tick-box that decides whether the copy itself is sent\nback to wpgraft so the fault can be reproduced and fixed. Pressing the button\nsends the score, the comment, the tick, your site's HOSTNAME and this plugin's\nversion to <code>https:\/\/wpgraft.com\/api\/feedback<\/code>, from your browser, using a\nsingle-use ticket that came with the copy. No account credential of yours and no\nWordPress credential is involved, and the request carries no cookie. The\ntick-box is ticked by default and the button says what will be sent (\"Send\nrating &amp; copy\" or \"Send rating only\"). The reply is a short thank-you message,\nand for a 5 it may carry a link to leave a review.<\/p>\n\n<p>Nothing is sent unless you press that button. Dismissing the card sends nothing.\nUnticking the box sends the score and the comment and no page content at all.\nThe HTML and CSS of the copy do not come from your site \u2014 this plugin never had\nthem \u2014 they are uploaded separately by the browser extension, from the account\nthat made the copy, and only for ratings you consented to.<\/p>\n\n<ul>\n<li>Terms: https:\/\/wpgraft.com\/terms<\/li>\n<li>Privacy policy, section 5.10: https:\/\/wpgraft.com\/privacy#what-we-collect<\/li>\n<\/ul>\n\n<p><strong>4. Google Fonts, for the typeface a copied page uses.<\/strong> When a copy names a\nfont, the page it was inserted into links a stylesheet from\n    https:\/\/fonts.googleapis.com, so your visitors' browsers load that font from\nGoogle. Only Google Fonts URLs are accepted. A site that wants no third-party\nrequests can drop them with the <code>wpgraft_capture_font_links<\/code> filter.<\/p>\n\n<ul>\n<li>Google Fonts terms: https:\/\/developers.google.com\/fonts\/terms<\/li>\n<li>Google Fonts privacy: https:\/\/developers.google.com\/fonts\/faq\/privacy<\/li>\n<li>Google privacy policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<p><strong>This build of the plugin's PHP contacts wpgraft.com for nothing at all<\/strong> \u2014\nupdates come from WordPress.org like any other plugin here, and your server\nmakes no request to us. The one request above is made by your browser, from the\neditor screen, when you press the button on the rating card.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate this plugin.<\/li>\n<li>Install the wpgraft browser extension for Chrome, and sign in.<\/li>\n<li>Open the page you want to copy from, pick a section with the extension, and\nchoose the site and builder to send it to.<\/li>\n<li>Open the target page in your builder. The wpgraft panel lists what is\nwaiting; insert it, and edit it like anything else.<\/li>\n<\/ol>\n\n<p>The plugin needs no configuration. Settings \u2192 wpgraft shows which builder it\ndetected, whether the in-editor runtime loaded, and the REST base the extension\ntalks to \u2014 useful when something does not arrive.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20page%20builders%20does%20it%20work%20with%3F\"><h3>Which page builders does it work with?<\/h3><\/dt>\n<dd><p>Elementor (both the classic v3 and the atomic v4 document models), Bricks,\nDivi 5, Beaver Builder, Breakdance, Oxygen 6, Oxygen Classic, and the\nWordPress block editor. Each one gets a document written in its own native\nformat, so a copied section arrives as Elementor widgets, Bricks elements,\nDivi modules, Beaver Builder modules or core blocks \u2014 whichever builder you\nopened.<\/p><\/dd>\n<dt id=\"do%20i%20need%20the%20browser%20extension%3F\"><h3>Do I need the browser extension?<\/h3><\/dt>\n<dd><p>Yes. The plugin is the receiving end; nothing is copied without the extension.<\/p><\/dd>\n<dt id=\"is%20a%20copied%20section%20really%20editable%3F\"><h3>Is a copied section really editable?<\/h3><\/dt>\n<dd><p>That is the point of it. Each builder gets its own document written in its own\nformat, with the styles in the builder's own style fields, so you edit, restyle\nand delete the elements normally. Where a builder has no field for something the\nsource page did, the plugin says so rather than faking it with a raw HTML block.<\/p><\/dd>\n<dt id=\"does%20it%20work%20without%20a%20paid%20plan%3F\"><h3>Does it work without a paid plan?<\/h3><\/dt>\n<dd><p>No. The plugin itself is free and has no licence check, but every section it\nreceives is converted by the wpgraft conversion service, and that service needs\na paid wpgraft plan \u2014 Pro monthly, Pro yearly or Lifetime. There is no free tier\nand no trial. Without a plan the extension copies nothing, so nothing reaches\nthis plugin. Plans and prices: https:\/\/wpgraft.com\/#pricing<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20phone%20home%3F\"><h3>Does the plugin phone home?<\/h3><\/dt>\n<dd><p>No. Your server never contacts wpgraft.com, and updates come from WordPress.org.\nThe only request to wpgraft.com is the rating card's, made by your browser when\nyou press its Send button (see External services, 3).<\/p><\/dd>\n<dt id=\"which%20user%20can%20use%20it%3F\"><h3>Which user can use it?<\/h3><\/dt>\n<dd><p>Inserting requires <code>edit_post<\/code> on the post being edited; importing assets\nrequires <code>upload_files<\/code>. Anything that writes raw HTML or CSS additionally\nrequires <code>unfiltered_html<\/code> \/ <code>edit_css<\/code>, so a contributor cannot smuggle markup\nin through a copied section.<\/p><\/dd>\n<dt id=\"can%20a%20copied%20page%20inject%20javascript%20or%20php%20into%20my%20site%3F\"><h3>Can a copied page inject JavaScript or PHP into my site?<\/h3><\/dt>\n<dd><p>No. The plugin never stores or prints JavaScript or PHP for any user. Script\nelements, event-handler attributes and PHP open tags are removed from every\ncopy before it is stored, the JavaScript field of every builder code element\nis emptied, and every stylesheet is rebuilt from an allowlist of standard CSS.\nNothing the plugin hands a builder is something that builder executes. Links\nthat point at executable code (<code>javascript:<\/code> URLs) are disabled. Each of those\nremovals is reported in the editor panel so you know what was left out.<\/p><\/dd>\n<dt id=\"oxygen%206%20shows%20an%20error%20or%20takes%20minutes%20when%20i%20save%20a%20copied%20page\"><h3>Oxygen 6 shows an error or takes minutes when I save a copied page<\/h3><\/dt>\n<dd><p>Oxygen 6 saves the page itself, in its own request; this plugin is not part of\nthat request. Oxygen's selectors are site-wide, and whenever a save changes\nthem (a pasted copy adds its own), Oxygen rebuilds the stylesheet of every\nselector on the whole site. The time that takes grows much faster than the\nnumber of selectors: a site with a few thousand saves in seconds, one with tens\nof thousands can take minutes. So a site that has received many copies saves\nmore and more slowly, whatever the size of the copy being saved. When the\nrebuild runs past PHP's maximum execution time (often 30 to 120 seconds on\nshared hosting) the save fails.<\/p>\n\n<ul>\n<li>Raise PHP's <code>max_execution_time<\/code> for the site to 300 seconds (your hosting\npanel, <code>php.ini<\/code> or <code>.user.ini<\/code>, or ask your host).<\/li>\n<li>Deleting a copied page does not delete its selectors: they stay in Oxygen's\n\"wpgraft\" selector collection and keep counting toward every save. Other\npages may use the same selectors, so delete one only when you know that no\npage on the site uses it.<\/li>\n<\/ul><\/dd>\n<dt id=\"will%20it%20copy%20a%20whole%20page%3F\"><h3>Will it copy a whole page?<\/h3><\/dt>\n<dd><p>Yes. Whole-page copies and section copies arrive through the same panel and are\ninserted by the same code \u2014 this plugin treats them identically and puts no\nlimit on either. Copying either kind needs a paid wpgraft plan; the plan is\nchecked by the remote conversion service, not by this plugin.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>WordPress admin files (file, media, image) are loaded only immediately before\nthe one function that needs them.<\/li>\n<li>Fonts and the block-editor stylesheet find the post being edited through\nWordPress (or the open builder) and only for a user who may edit it, instead\nof reading the post ID from the request.<\/li>\n<li>Breakdance and Oxygen 6 global selectors are written through the builder's own\noption API.<\/li>\n<li>Removed an unused Divi 5 font-registry writer.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Every stylesheet a copy carries is now parsed and rebuilt from an allowlist of\nstandard CSS properties, values, functions, selectors and at-rules, instead of\nbeing screened for known-bad patterns. Over 54,000 real copied stylesheets the\nresult is identical; anything that is not standard CSS is dropped and\nreported. The Beaver Builder per-module CSS, Elementor page and per-variant\nCSS and Divi 5 free-form CSS fields are covered too.<\/li>\n<li>The editor runtime is loaded as a script file (assets\/js\/wpgraft-editor.js)\ninstead of being printed inline, and the admin-ajax address comes from\nWordPress rather than being assumed.<\/li>\n<li>Bricks: only inline SVG drawings are signed, after the SVG sanitizer rebuilt\nthem; a Bricks Code element is never signed.<\/li>\n<li>Elementor: importing a copy's images into the Media Library requires the\n  upload_files capability, like every other import path.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>One-click insert from the wpgraft section Library: a section you pick on\nwpgraft.com\/library goes straight into the builder you have open, the same way\nthe panel's own Insert button does. Older plugins still receive it in the panel.<\/li>\n<li>A builder that reloads to show a paste (Divi 5) no longer leaves the same copy\nin the panel a second time.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Rating card: closing the panel with the \u00d7 or the wpgraft button now closes an\nunanswered rating card too. Before, the next copy opened on the previous\ncopy's rating card, with its own Insert button hidden underneath.<\/li>\n<li>The rating card now appears after every insert. The \"Don't ask again\" link,\nits row on Settings -&gt; wpgraft and the \/wpgraft\/v1\/prefs REST route are gone.\nClosing the card still sends nothing.<\/li>\n<li>After you rate a copy, the card answers with one short headline and one clear\nnext step: a review link for a 5, a support ticket link when the copy was not\nsent, and what happens next for a low score.<\/li>\n<li>The readme no longer says web fonts are imported: no font files are installed.\nA copied page loads its typeface from Google Fonts by name (listed under\nExternal services).<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Elementor 4.3: copies insert again. Elementor 4.3 changed how heading,\nparagraph and button text is stored, and refused every copy with\n\"Settings validation failed. title: invalid_value\". wpgraft now writes the\ntext in whichever form the site's Elementor expects, so 4.2 and 4.3 both work,\nand adding to a page that already holds an earlier copy works too.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>wpgraft is now a paid service (Pro monthly, Pro yearly or Lifetime); the\nplugin itself is unchanged in that respect and checks nothing.<\/li>\n<li>Ready for icon fonts that travel with a copy (used once the conversion\nservice sends them): icons still drawn by a font, rather than inline SVG, can get\nthat one icon face added to the page. New REST route: \/wpgraft\/v1\/icon-faces\n(same permission as \/save; only <code>@font-face<\/code> blocks with embedded <code>data:<\/code>\nfonts are accepted).<\/li>\n<li>Elementor: large copies open in the V4 editor instead of stalling; inserting\nregenerates only the CSS of the page you inserted into, not the whole site's;\nElementor 3 copies keep their hover styles and icon-list icons; YouTube\nembeds work in Elementor Free.<\/li>\n<li>Elementor: two copies inserted at the same moment on a full global-class kit\nno longer leave one page unstyled.<\/li>\n<li>Image import on slow hosts no longer stops at PHP's 120-second limit.<\/li>\n<li>Very deep Breakdance copies (more than 64 levels) are accepted.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>The panel asks how each copy turned out once it is inserted: a score from 1\nto 5, a comment, and a tick-box that sends that one copy back to wpgraft so\nthe fault can be reproduced. Nothing is sent unless you press the button, and\nno page content is sent while the box is unticked. \"Don't ask again\" turns\nthe card off for your user; Settings -&gt; wpgraft turns it back on.<\/li>\n<li>Every queued copy shows its size against what this site can store and render\n(the PHP memory limit, the MySQL packet size, the builder's own ceiling)\nbefore you insert it. A copy that will probably fail is labelled \"Insert\nanyway\" rather than blocked. New read-only REST route: \/wpgraft\/v1\/limits.<\/li>\n<li>A copy the database refused to store is now reported instead of acknowledged\nand lost.<\/li>\n<li>Direct-download build only (not this one): the \"Enable auto-updates\" link\nappears for the plugin.<\/li>\n<li>Elementor: inserting on a site with hundreds of Elementor documents and a\nfull global-class kit no longer ends in a critical error.<\/li>\n<li>Oxygen Classic: large copies are inserted in one pass; the editor no longer\ncrashes at a few thousand elements.<\/li>\n<li>The panel talks to the page's own origin, so sites behind a TLS-terminating\nproxy, or opened on www when WordPress is configured without it, no longer\nget 401\/403; plain permalinks no longer 404 the queue.<\/li>\n<li>Images the site already has are reused rather than fetched again.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Direct-download build only (not this one): a fix to its update check. Sites\ninstalled from WordPress.org are updated by WordPress.org and were never\naffected.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Every copy is now scrubbed of script elements, event-handler attributes, PHP\nopen tags and JavaScript fields before it is stored, for every user, and\nevery stylesheet is validated statement by statement before it is saved.<\/li>\n<li>A copy whose only root element was a code block no longer bypasses the\n  unfiltered_html gate on Breakdance and Oxygen.<\/li>\n<li>Oxygen 6's HTML Code and CSS Code elements are now covered by the same gate\nas the Breakdance Code Block.<\/li>\n<li>Stylesheets the plugin prints on the front end go through the WordPress\nstyle API instead of a hand-written <code>style<\/code> element; the settings screen's\nstyling moved to a stylesheet file.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First stable release. All ten builder targets supported: Gutenberg, Elementor\n(v3 and v4), Bricks, Breakdance, Divi 5, Beaver Builder, Oxygen 6 and\nOxygen Classic.<\/li>\n<\/ul>\n\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Beaver Builder and Divi 5 support.<\/li>\n<li>Elementor: both the classic (v3) and atomic (v4) document models are detected\nand written natively.<\/li>\n<li>Assets are matched by content, so re-importing a section reuses the\nattachments it already created.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Block editor support, including per-instance custom CSS.<\/li>\n<li>Oxygen Classic: stylesheet writes normalised so the editor cannot be left\nhanging on load.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: Bricks, Breakdance, Oxygen 6, Oxygen Classic and Elementor.<\/li>\n<\/ul>","raw_excerpt":"Copy any web page into Elementor, Bricks, Divi, Oxygen, Breakdance, Beaver Builder or Gutenberg as native, editable builder elements.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/364168","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=364168"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sasagugunovic"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=364168"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=364168"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=364168"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=364168"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=364168"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=364168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}