{"id":353583,"date":"2026-08-30T13:39:18","date_gmt":"2026-08-30T13:39:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/page-composer-basic\/"},"modified":"2026-09-01T21:41:07","modified_gmt":"2026-09-01T21:41:07","slug":"page-composer-basic","status":"publish","type":"plugin","link":"https:\/\/it.wordpress.org\/plugins\/page-composer-basic\/","author":13192018,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.6.83","stable_tag":"1.6.83","tested":"7.1","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Page Composer \u2014 Basic","header_author":"Page-composer.com","header_description":"Replaces the default editor on Posts and Pages with the Page Composer visual editor. Compose pages from real components and render them with the PCEditor library.","assets_banners_color":"f7edfa","last_updated":"2026-09-01 21:41:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/page-composer.com\/plugins","header_author_uri":"https:\/\/page-composer.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":99,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.6.82":{"tag":"1.6.82","author":"segorev","date":"2026-08-30 13:38:45","revision":3672589},"1.6.83":{"tag":"1.6.83","author":"segorev","date":"2026-09-01 21:41:07","revision":3676874}},"upgrade_notice":{"":"<p>Page Composer Pro unlocks all field types, component templates, Live mode and priority\nsupport: https:\/\/page-composer.com\/pricing<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3672598,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3672598,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3672612,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3672612,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.82","1.6.83"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[14696,3938,1332,1084],"plugin_category":[46],"plugin_contributors":[278325],"plugin_business_model":[],"class_list":["post-353583","plugin","type-plugin","status-publish","hentry","plugin_tags-components","plugin_tags-drag-and-drop","plugin_tags-editor","plugin_tags-page-builder","plugin_category-editor-and-writing","plugin_contributors-segorev","plugin_committers-segorev"],"banners":{"banner":"https:\/\/ps.w.org\/page-composer-basic\/assets\/banner-772x250.png?rev=3672612","banner_2x":"https:\/\/ps.w.org\/page-composer-basic\/assets\/banner-1544x500.png?rev=3672612","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/page-composer-basic\/assets\/icon-128x128.png?rev=3672598","icon_2x":"https:\/\/ps.w.org\/page-composer-basic\/assets\/icon-256x256.png?rev=3672598","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Page Composer \u2014 Basic replaces the default editor on Posts and Pages with the Page\nComposer visual editor. Compose Posts and Pages from real components (Text, Image,\nWooCommerce blocks) and render them with the bundled PCEditor library.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Page Composer editor on Posts, Pages and the Page Templates post type.<\/li>\n<li>Composed content is stored as JSON in post meta and compiled into\n  wp_posts.post_content as an HTML snapshot on every save \u2014 so\nWordPress search, feeds and other plugins see real page text while the live\npage always renders fresh from the JSON.<\/li>\n<li>Native revisions cover both the snapshot and the JSON (WP 6.4+ revisioned\nmeta) \u2014 restoring a revision restores the composition.<\/li>\n<li>Page Composer \u2192 Reindex: rebuild all snapshots after component-template\nchanges (theme overrides, markup edits) without re-saving every post.<\/li>\n<li>Rendering via the PCEditor general library, with theme-overridable templates\n(drop <code>{Component}.php<\/code> into your theme's <code>pce_templates\/<\/code>).<\/li>\n<li>Per-component CSS (the <code>css_props<\/code> field) compiled into media queries.<\/li>\n<li>Settings (Editor \/ Components \/ Reindex tabs): enable the editor (it\nreplaces the WordPress block editor and Site Editor on Posts and Pages),\nallowed roles, default Row grid, media-query sizes, and CSS output.<\/li>\n<li>Detects conflicting page builders (Elementor, WPBakery, Divi, Beaver Builder,\n\u2026) and disables the editor with a notice while any is active.<\/li>\n<li>Load\/Save page templates, stored as a custom post type and re-editable in the editor.<\/li>\n<li>WooCommerce components (18) via shortcodes \u2014 products, recent\/featured\/sale\/\nbest-selling\/top-rated, by category\/attribute, single product, related, add to\ncart (+ URL), cart, checkout, my account, order tracking.<\/li>\n<li>WordPress-widget components (13) \u2014 Search, Categories, Recent Posts, Tag Cloud,\nArchives, Calendar, Menu, Meta, Pages, Recent Comments, RSS, Links, Text.<\/li>\n<li>Raw HTML and Raw JS components for embedding custom markup and scripts.<\/li>\n<li>Contact Form 7 component (own editor tab) \u2014 embed a form by its ID and\noptional title (offered while the Contact Form 7 plugin is active).<\/li>\n<li>Content components: Title (configurable tag + font size), Quote, Separator,\nCTA Button (colors as CSS variables) and Google map (Maps Embed API key in\nSettings \u2192 Components; keyless embed without one).<\/li>\n<li>\"Page Composer \u2014 Full Width\" page template (Page Attributes \u2192 Template) \u2014\nthe active theme's header + footer only, content full-width (classic + block\nthemes).<\/li>\n<li>Default Row\/Col grid stylesheet loaded in the active theme (disable with the\n  pce_load_grid_styles filter, or override the --pce-grid-* custom properties).<\/li>\n<li>Configurable Row column-layout presets (Components \u2192 Row layouts) \u2014 a visual\nbar builder, fed to the editor as editor.hooks.filters.components.Row.layouts.<\/li>\n<li>Yoast SEO content analysis integration.<\/li>\n<li>Filters: <code>pce_components<\/code>, <code>pce_css_field<\/code>, <code>pce_editor_enabled<\/code>,\n  pce_load_assets, <code>pce_load_grid_styles<\/code>, <code>pce_content_meta_key<\/code>,\n  pce_pre_save_content, <code>pce_load_content<\/code>.<\/li>\n<\/ul>\n\n<p>No account or API key is needed \u2014 activate the plugin and the editor works.<\/p>\n\n<h4>WooCommerce support<\/h4>\n\n<p>Page Composer ships ready-made components for WooCommerce stores: products\n(recent, featured, on sale, best selling, top rated), products by category or\nattribute, a single product, related products, add to cart (and its URL), cart,\ncheckout, my account and order tracking. They render through WooCommerce's own\nshortcodes, so they appear in the editor only while WooCommerce is installed and\nactive, and they follow your WooCommerce templates and styling. WooCommerce\nitself is not bundled or required \u2014 without it, Page Composer simply omits these\ncomponents.<\/p>\n\n<p>Page Composer is an independent product. It is not affiliated with, endorsed by\nor sponsored by Automattic or WooCommerce. \"WooCommerce\" and \"WordPress\" are\ntrademarks of their respective owners and are used here only to describe\ncompatibility.<\/p>\n\n<h3>External services<\/h3>\n\n<p>The plugin performs no license or activation calls \u2014 no account and no API key\nare needed, and nothing is sent automatically in the background.<\/p>\n\n<p><strong>Feedback to page-composer.com (user-initiated only).<\/strong> Two optional forms\nsend data to <code>https:\/\/page-composer.com\/plugin-feedback<\/code>, and only when an\nadministrator explicitly submits them:<\/p>\n\n<ul>\n<li><em>Leave a testimonial<\/em> (linked from a dismissible admin notice): sends the\nstar rating and testimonial text the admin typed.<\/li>\n<li><em>Deactivation survey<\/em> (shown when deactivating the plugin; fully skippable\nvia \"Skip &amp; deactivate\", which sends nothing): sends the selected reason and\nthe optional description.<\/li>\n<\/ul>\n\n<p>Both submissions also include the site's domain name, the plugin version and\nthe WordPress version, so we can reproduce reported problems. No page content,\nno personal data and no visitor data is ever sent, and nothing is sent without\nan explicit form submission. This service is operated by Page-composer.com \u2014\nsee our terms (https:\/\/page-composer.com\/terms) and privacy policy\n(https:\/\/page-composer.com\/privacy).<\/p>\n\n<p><strong>Google Maps (frontend embed, only if you use the Google map component).<\/strong>\nWhen a page contains the Google map component, that page embeds a map in an\niframe from google.com \u2014 through the Google Maps Embed API when a key is\nconfigured under <em>Page Composer \u2192 Settings \u2192 Components<\/em>, or Google's keyless\nclassic embed when it is not. The embed is requested by the visitor's browser\nwhen such a page loads, and carries the map address\/coordinates you entered in\nthe component plus the standard request headers the browser sends to any site\n(IP address, user agent, referrer). The plugin itself sends no data to Google\nfrom the server, and pages without this component make no Google requests at\nall. This service is provided by Google: terms of service\n(https:\/\/policies.google.com\/terms), privacy policy\n(https:\/\/policies.google.com\/privacy), Google Maps Platform terms\n(https:\/\/cloud.google.com\/maps-platform\/terms).<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The editor bundle shipped in <code>assets\/editor\/js\/pceditor_wp_basic.js<\/code> is a\nstandard webpack production build of the Page Composer editor. Bundled\nthird-party libraries (React, ReactDOM and small MIT\/ISC utilities) are listed\nwith their licenses in <code>assets\/editor\/js\/pceditor_wp_basic.js.LICENSE.txt<\/code>;\nthe plugin's own PHP is unminified throughout. Questions about the build are\nwelcome at sergey@page-composer.com.<\/p>\n\n<h3>Storage hooks<\/h3>\n\n<p>By default the composed JSON lives in the <code>_pce_content<\/code> post meta, and a\ncompiled HTML snapshot of it is written to <code>wp_posts.post_content<\/code> on every\nsave (that snapshot is what search\/feeds\/REST consumers read; the live page\nrenders from the JSON). Three filters customise the storage:<\/p>\n\n<pre><code>pce_content_meta_key \u2014 `filter( string $meta_key )`\n<\/code><\/pre>\n\n<p>Rename the post meta key that holds the JSON (default <code>_pce_content<\/code>).\nApplied consistently to every read\/write, including revisioning and the\nReindex tool. Register it before <code>init<\/code> priority 10 (top-level in your plugin\nor in the theme's functions.php \/ <code>after_setup_theme<\/code>) and in every context\n(admin, frontend, cron) \u2014 the one-time storage migration and the revisioned\nmeta registration resolve the key there. Adopting the filter on a site with\nexisting content requires copying the <code>_pce_content<\/code> meta to the new key\nyourself.<\/p>\n\n<pre><code>pce_pre_save_content \u2014 `filter( bool $handled, string $json, array $postarr )`\n<\/code><\/pre>\n\n<p>Runs on save (inside <code>wp_insert_post_data<\/code>). Store <code>$json<\/code> yourself (a custom\ntable, an external service) and return <code>true<\/code>; the plugin then writes neither\nthe meta nor the snapshot. <code>$json<\/code> arrives unslashed and JSON-validated (or\nempty when the composition was cleared).<\/p>\n\n<pre><code>pce_load_content \u2014 `filter( string $json, WP_Post $post )`\n<\/code><\/pre>\n\n<p>Runs wherever the plugin reads a post's composition (editor metabox, frontend\nrenderer, Yoast analysis). Receives the meta value as the default; return your\nstored JSON instead.<\/p>\n\n<p>Example \u2014 rename the meta key:<\/p>\n\n<pre><code>add_filter( 'pce_content_meta_key', fn () =&gt; '_my_composition' );\n<\/code><\/pre>\n\n<p>Example \u2014 store the JSON in a custom table:<\/p>\n\n<pre><code>add_filter( 'pce_pre_save_content', function ( $handled, $json, $postarr ) {\n    my_table_store( (int) $postarr['ID'], $json );\n    return true;\n}, 10, 3 );\n\nadd_filter( 'pce_load_content', function ( $json, $post ) {\n    $stored = my_table_fetch( $post-&gt;ID );\n    return $stored !== null ? $stored : $json;\n}, 10, 2 );\n<\/code><\/pre>\n\n<p>The saved page templates (Load\/Save window) follow the same storage: JSON in\nthe templates CPT's meta, snapshot in its post_content. Saved component\nsettings (each component's Load\/Save-settings window) are posts of the\n    pce_comp_templates post type \u2014 the component name in <code>_pce_component_tag<\/code>,\nthe settings JSON in <code>_pce_component_json<\/code> \u2014 the same storage the Pro plugin\nuses, so an upgrade keeps every saved version. (Pre-existing entries in the\nold <code>pce_components_store<\/code> option are migrated automatically once; the option\nis kept as a downgrade backup until uninstall.)<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin to <code>\/wp-content\/plugins\/<\/code> (or install it from the Plugin\nDirectory) and activate it.<\/li>\n<li>Open <em>Page Composer \u2192 Settings<\/em> and enable the editor \u2014 it replaces the\nblock editor on Posts and Pages.<\/li>\n<li>Edit any Post or Page: compose it from components, then Update as usual.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.6.83<\/h4>\n\n<ul>\n<li>Components window: a long category list no longer overlaps the bar with the\naction buttons.<\/li>\n<li>Fixed a potential editor freeze in background tabs when a save\/load request\nfailed \u2014 request errors now log to the browser console instead of showing a\nblocking alert.<\/li>\n<\/ul>\n\n<h4>1.6.82<\/h4>\n\n<ul>\n<li>Columns can now be reordered by dragging the new handle in a column's\ntoolbar \u2014 the neighbouring columns slide aside to show where it will land.<\/li>\n<li>Security hardening: composition JSON is now filtered by author capability on\nevery save, mirroring how WordPress core treats post_content. Authors without\nthe <code>unfiltered_html<\/code> capability have field values passed through\n  wp_kses_post() and script payloads (Raw JS) removed; authors with the\ncapability are unaffected.<\/li>\n<\/ul>\n\n<h4>1.6.80<\/h4>\n\n<ul>\n<li>First public release on WordPress.org.<\/li>\n<li>Visual component editor for Posts and Pages with saved page templates and\nper-component saved settings.<\/li>\n<li>WooCommerce (18), WordPress-widget (13), Contact Form 7 and content\ncomponents; Yoast SEO analysis integration.<\/li>\n<li>Full Width page template, configurable Row layouts, grid stylesheet filters.<\/li>\n<li>Wysiwyg paste clean-up (data-* attributes and copy artifacts are stripped).<\/li>\n<li>Interface translated into 12 languages.<\/li>\n<\/ul>","raw_excerpt":"Replaces the default editor on Posts and Pages with the Page Composer visual editor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/353583","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=353583"}],"author":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/segorev"}],"wp:attachment":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=353583"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=353583"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=353583"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=353583"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=353583"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=353583"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}