=== Easy Content Manager (ECM) – Custom Post Types, Custom Fields & Content Management === Contributors: kodezen Author: Kodezen Author URI: https://kodezen.com/ Plugin URI: https://easycontentmanager.pro/ Tags: custom post type, custom fields, taxonomy, content management, repeater Requires at least: 6.4 Tested up to: 7.1 Requires PHP: 7.4 Stable tag: 1.3.1 License: GPL-3.0+ License URI: http://www.gnu.org/licenses/gpl-3.0.txt Add extra data fields, custom post types and taxonomies, and manage all your WordPress content visually — without writing any code. == Description == **Easy Content Manager (ECM) – Add extra data fields and manage website content in WordPress** Easy Content Manager is the fast, flexible content management plugin built for creators, developers, and website owners who want better control over their WordPress posts, pages, users, settings, taxonomy and custom post types—without the clutter, bloat, or manual work. From docs, blogs, services, portfolios, courses, and products—to any type of custom post, ECM lets you create and manage everything in one place. Add advanced taxonomies and custom fields like ratings, videos, author details, product data, client feedback, and more. You get full flexibility to organize, filter, and control how content is displayed—without writing a single line of code. = 👥 Who Should Use Easy Content Manager? = * **🎯 Website Owners** – Running a portfolio, blog, recipe site, job board, or local business directory? ECM makes it easy to manage structured content without relying on extra plugins or developers. * **🧑‍💻 Freelancers & Agencies** – Deliver client-specific content types fast. Build and manage post types for real estate listings, staff directories, service lists, product catalogs, or testimonials—right from the dashboard. Create functional client sites even without extra third-party tools. * **📝 Bloggers** – Add advanced fields like "Author Bio", "Post Rating", "Reading Time", or "Source Link" directly to your blog posts—without bloating your theme. A full-featured blogging site can be built with ECM alone. * **🎓 Course Creators** – Need to display instructor info, course outline, video links, or duration on course pages? Do it all visually—no coding needed. Build a basic course website even without an LMS plugin. * **🛒 Store Owners & eCommerce Sites** – Add extra product info like expiration dates, supplier links, additional images, or video reviews. You can launch a product showcase site without using any eCommerce plugin. * **🏢 Local Businesses** – Showcase team members, services, client feedback, or service areas with clean, professional layouts. Even without extra add-ons, you can build a working business website. * **📇 Directory or Listing Sites** – Manage complex databases like job listings, restaurants, agencies, or vendors. ECM supports user reviews, ratings, ownership claims, popularity tracking, and saved listings—ideal for directory-style websites. * **👨‍🔧 Developers** – Get a quick, clean visual editor to test custom post types and field structures before pushing to production. Build full content prototypes without relying on external plugins. = 🔧 What Is Easy Content Manager (ECM) and Why It Matters = Working with dynamic content in WordPress can be painful—especially when you need to manage custom post types, structured data, or repeatable content sections. Most solutions either focus only on adding custom fields or force you into a clunky third-party plugin or manual coding and post edits. Easy Content Manager (ECM) solves this from both sides. You're not just creating custom fields—you're also getting a dedicated interface to manage those fields visually, without jumping into individual post screens. ECM provides a clean, fast UI where you can add, update, organize, and filter your content—all from a single screen. Instead of just inserting fields into a form, you can: * View and manage field values * Instantly filter posts by categories or status * Create repeatable field groups and display them visually * Control your content types and field logic without writing a single line of code Where others stop at field creation, ECM gives you full content control—for posts, products, courses, testimonials, or any custom content type. You can: * Edit, duplicate, delete, and filter any post type * Manage custom fields, taxonomies, and content settings visually * Create your own dashboard layout using custom field views * Avoid the mess of jumping between WordPress menus and post screens Beyond content structure, ECM also supports built-in user interaction features. You can enable reviews, ratings, reactions, upvotes, bookmarks, and view counts on any post type and manage all engagement data directly from the dashboard—without installing separate plugins. = 🧠 Why Use ECM Over Traditional Custom Field Plugins? = Most developers know tools like Advanced Custom Fields (ACF). These are solid for adding custom fields—but limited when it comes to actually managing content. ECM is more than a custom field builder—it's a complete content management tool for WordPress. * **✅ Visual Field Management – Not Just Creation** – ACF creates fields. ECM goes further with a dedicated interface to view and manage field values directly from the dashboard—no digging through single post pages. * **✅ Manage Fields and Content from One Dashboard** – Add, edit, delete, and duplicate posts; manage categories, tags, comments, and featured images; apply filters to find content instantly; and work across all post types from one place. * **✅ Custom Settings Builder (Pro)** – Create custom settings panels for site-wide data like contact info, social links, and global banners—something ACF doesn't offer by default. No code needed. = ✨ Easy Content Manager Features = * **Create Custom Post Types Without Coding** – Set names, slugs, icons, visibility, and more in a few clicks. Supports advanced post sorting by title or date (ascending/descending). * **Add Advanced Custom Fields to Any Post Type** – Collect structured content and display dynamic data without extra plugins. * **Visual Field Management Interface** – View, edit, and manage custom field values across posts from one clean dashboard. * **Create and Group Fields Logically** – Organize related fields using Field Groups and apply them to specific post types. * **Built-In Taxonomy Support** – Create and manage custom taxonomies like "Job Type," "Course Level," or "Project Status." * **Settings Panel Builder for Global Data (Pro)** – Store site-wide values like contact info, header scripts, or social links. * **Supports 35+ Field Types Out of the Box** – Text, Textarea, Number, Email, URL, Password, Rich Text, Image, File, Video, Date, Time, Switch, and more. * **Reusable Field Groups Across Post Types** – Apply the same group of fields to multiple post types without rebuilding. * **Test and Preview Changes Instantly** – Post types, taxonomies, and field groups apply and load instantly in WordPress. * **Manage Existing Post Types with ECM** – Attach custom fields, taxonomies, and settings to WordPress defaults like Posts and Pages. * **Clean and Lightweight Codebase** – Loads only when needed and integrates smoothly with modern WordPress setups. * **Settings Builder (Pro)** – Create custom settings pages for any WordPress plugin/theme and extend existing plugins/themes without complex code. * **Display Custom Field Data Anywhere Using Shortcodes** – The `[ecm_field]` shortcode displays any custom field value—text, image, link, file, or any supported type—inside pages or posts. = 🔌 Easy Content Manager Pro = This plugin is complete and fully functional on its own. A separate Pro package, available from [easycontentmanager.pro](https://easycontentmanager.pro/), adds gallery and repeater field types, the Settings Builder, and the following add-ons. None of this Pro code is included in this plugin. * **Claim Addon** – Lets users submit ownership claims for posts, listings, or custom post types. Admins can review, approve, or reject claims from the dashboard. * **Review Addon** – Enables users to submit reviews on any post type, with admin moderation controls and per-post-type enable/disable. * **Ratings Addon** – Adds numeric or star-based ratings to any post type, managed from the backend per content type. * **Bookmark Addon** – Lets users save posts for later (custom post types supported). Bookmarks are stored per user and shown in profiles or dashboards. * **Upvote Addon** – Enables post upvoting to measure popularity, with anonymous voting, abuse prevention, and admin controls. * **View Counter Addon** – Tracks post and page views automatically (custom post types supported), with anonymous tracking and time-based count control. * **Reaction Addon** – Adds multiple reaction types such as like, love, or wow for any post type, managed from the admin panel. == Installation == 1. Upload the `easy-content-manager` folder to the `/wp-content/plugins/` directory, or install the plugin through the WordPress plugins screen directly. 2. Activate the plugin through the 'Plugins' screen in WordPress. 3. Use the Easy Content Manager menu in the admin to create your post types, taxonomies, and fields. == External Services == Easy Content Manager connects to the external services listed below, only in the situations described. = OpenStreetMap map tiles and Nominatim search (Map field, admin editor) = When you edit a post that has a Map field, the map preview loads map tile images from the OpenStreetMap tile servers (tile.openstreetmap.org). If you type an address into the Map field's search box, the text you typed is sent to the OpenStreetMap Nominatim geocoding service (nominatim.openstreetmap.org) to look up its coordinates. Your browser's IP address and user agent are visible to these servers as part of the requests. Nothing is sent unless a Map field is displayed in the editor. Service provider: OpenStreetMap Foundation. Terms of Use: https://osmfoundation.org/wiki/Terms_of_Use (tiles: https://operations.osmfoundation.org/policies/tiles/, Nominatim: https://operations.osmfoundation.org/policies/nominatim/) Privacy Policy: https://osmfoundation.org/wiki/Privacy_Policy = Google Maps embed (Map field, front end) = When a Map field is displayed on the front end of your site (for example with the `[ecm_field]` shortcode), the plugin embeds a Google Maps iframe for the saved latitude, longitude and zoom level. Those coordinates are sent to Google (www.google.com) when a visitor loads the page, and Google receives the visitor's IP address and browser details. Nothing is sent on pages that do not display a Map field. Service provider: Google LLC. Terms of Service: https://maps.google.com/help/terms_maps/ Privacy Policy: https://policies.google.com/privacy = Kodezen (store.kodezen.com) — optional feedback and usage data = * **Deactivation feedback (optional).** If you deactivate the plugin and submit the optional feedback form, the deactivation reason you select plus the plugin slug and version are sent to https://store.kodezen.com. No personal or site data is sent unless you explicitly tick the "Also send my site data" checkbox shown in that form. If you tick it, the form additionally sends your admin name and email, site name and URL, server IP address, server/PHP/database versions and operating-system details, WordPress version and locale, and your list of active/inactive plugins and active theme. Choosing "Skip & Deactivate" sends nothing. * **Usage tracking (optional, off by default).** The plugin can periodically send the same site-environment data described above to help improve the product, but only after you explicitly opt in. Tracking is disabled until you opt in and can be turned off again at any time. This plugin does not perform license checks; no feature depends on a license or on this service. Service provider: Kodezen. Terms of Service: https://kodezen.com/terms-and-conditions/ Privacy Policy: https://store.kodezen.com/privacy-policy/ == Source Code == The full source code is publicly available on GitHub: https://github.com/kodezen/easy-content-manager The JavaScript and CSS in `assets/build/` are compiled from the human-readable sources included in this plugin: * `dev_contentManager/` — React/JavaScript sources for every bundle. * `assets/scss/` — SCSS sources for the stylesheets. * `package.json` and `webpack.config.js` — build configuration (uses `@wordpress/scripts`). * `composer.json` — PHP dependencies installed into `vendor/`. To rebuild the assets: 1. Install Node.js 20 or newer and Composer. 2. Run `composer install --no-dev` and `npm install` in the plugin folder. 3. Run `npm run build` (or `npm run start` while developing). == Frequently Asked Questions == = Do I need to write code to use ECM? = No. Post types, taxonomies, and fields are all created from the admin UI. A Frontend Field API is also available for developers who want to display fields in custom templates. = Can I add custom fields to existing post types like Posts and Pages? = Yes. ECM lets you attach custom fields, taxonomies, and settings to existing post types—including WordPress defaults—without recreating anything. = How do I display a field on the frontend? = Use the `[ecm_field]` shortcode, or the Frontend Field API helpers such as `ecm_get_field()` and `ecm_the_field()`. = What is the minimum WordPress version? = WordPress 6.8 or higher. = What is the minimum PHP version? = PHP 7.4 or higher. == Changelog == = 1.3.1 — 2026-10-24 = * Security: Password fields are never shown in plain text: the field template shows a mask, `[ecm_fields]` skips them, and the REST API only returns them to users who can edit the post. * Security: Visitors can no longer create new tags or terms through frontend submission; they can only choose existing ones. * Security: "Require CAPTCHA" now blocks visitor submissions until GemSecurity's CAPTCHA is set up, instead of silently skipping the check. The settings screen warns when it isn't configured. * Security: Files uploaded by visitors are no longer publicly downloadable before review, and each visitor can upload at most 50 MB per day (filterable). * Security: With anonymous submission on, logged-in users still need one of the allowed roles to submit. * Added: A redesigned image/file upload field with drag and drop for visitors, the accepted file types and size limit, a preview card, and Replace/Remove buttons. * Added: Add-on shortcodes share one look: card lists for bookmarks, upvotes, reactions and claims, count badges, a view counter with an icon, and styled empty and login messages. * Changed: The Set Order modal saves typed priorities and drag-and-drop changes only when you click Save. * Changed: The frontend submission form fits the theme's content width; logged-out visitors no longer see an empty sidebar. * Changed: List tables, the Set Order button and modal, and the Tools Export/Import card have updated borders and colors. * Changed: Add-on shortcode output is more compact. * Fixed: Add Featured Image on the front end did nothing (the media library is now loaded for users who can upload). * Fixed: Front-end form placeholders looked like real text, and the textarea used a monospace font. * Fixed: Reactions and the review form stopped working on pages with bookmarks or upvote/reaction lists. * Fixed: The Claim Now button threw a JavaScript error. * Fixed: Review lists showed the post's average instead of each review's own rating, rating bars were nearly empty, and totals didn't update when a review was approved from the Comments screen. * Fixed: Logged-out messages and counts appeared outside the content area in block themes. * Fixed: A missing image (404) on empty lists in the frontend submission app. = 1.3.0 — 2026-10-20 = * Added: Anonymous frontend submission — visitors can submit without an account, protected by a GemSecurity CAPTCHA option and a per-visitor submission limit. * Added: Visitors see their own submissions with `show_list="true"` and can edit or delete the ones that are not yet published (tracked by a signed cookie). * Added: Visitors can upload files directly. Files are validated and held privately, become attachments when an admin opens the submission, and appear on the site only after it is published. * Added: `[ecm_fields]` shortcode that shows every custom field of a post with its label (`post_id`, `label`, `include`, `exclude`). * Added: Tools › Shortcodes now has one sub item per add-on in the sidebar, plus a dedicated Custom Field section. * Added: Frontend submission topbar stays sticky, a "Back to List" button on the form, and notifications appear at the top right. * Changed: Submission status in the Frontend Submission settings is now a Pending/Draft radio choice. * Changed: The front-end editor only shows the content field when the post type supports the editor. * Changed: The submission form uses the full width when the post type has no sidebar fields. * Changed: Editing your own submission no longer counts towards the submission limit. * Fixed: Custom field labels missing on the front-end form. * Fixed: A failed submission request showed an extra "res is undefined" error. = 1.2.10 — 2026-10-17 = * Fixed: PHP 7.4 compatibility — replaced PHP 8-only string functions used in AJAX requests. * Fixed: Escaped the admin app wrapper attributes and restricted oEmbed output to safe tags. * Changed: Namespaced the internal Hooks class to avoid collisions with other plugins. * Changed: Plugin header no longer declares "Tested up to"; readme and header versions now match. * Changed: Widget scan reads widget data via the Options API. = 1.2.9 — 2026-10-12 = * Changed: The plugin no longer contains any Pro code or license checks; gallery/repeater fields, the Settings Builder and add-ons are provided by the separate Pro package. * Changed: The HTML source view no longer loads an editor from a public CDN. * Changed: oEmbed previews now use WordPress core's oEmbed proxy instead of a third-party service. * Changed: Admin menu moved lower in the dashboard menu. * Fixed: Replaced deprecated `get_page_by_title()` with `WP_Query`. * Fixed: Import uploads now go through `wp_handle_upload()`. * Security: Post priority listing now requires edit access to the requested post type. * Added: Readable JS/SCSS sources, `composer.json` and build instructions are included; external services are fully documented. = 1.2.8 — 2026-09-27 = * Fixed: The 1.2.7 release package mistakenly contained a nested `trunk` folder. This release ships a clean package. = 1.2.7 — 2026-09-27 = * Improved: The StoreEngine licence SDK is now loaded by requiring its `init.php` directly instead of relying on Composer's `files` autoload, so a newer bundled SDK is no longer silently skipped when several active plugins each ship a copy. * Improved: Declared `critical_paths` for the licence SDK's pre-swap update validation, so an incomplete or truncated update package is rejected before WordPress swaps the plugin folder. * Improved: Updated the bundled licence SDK to 1.5.9 — no more licence-server calls on every admin page load, batched background update checks, and a circuit breaker when the licence server is down. * Improved: Refactored the React content editor's styles onto CSS variables and separated out WordPress admin-chrome overrides for more consistent theming across the backend, block editor, and classic editor. * Fixed: Taxonomies attached to another plugin's post type (e.g. an LMS course type) now get an admin submenu placed under that plugin's menu correctly. * Fixed: The post list no longer loses its current page, search term, status filter, or sort order when its data refreshes. = 1.2.6 — 2026-08-25 = - Added What's new section into Topbar - Fixed non-admin users with the `manage_categories` capability (e.g. category managers) being unable to create categories. - Fixed React admin routes not enforcing capability checks; unauthorized requests are now redirected and only routes/menu items the current user has permission to access are exposed. - Fixed manually typed or drag-reordered post priorities still colliding with existing values when a search filter or pagination hid the rest of the list; priority moves are now resolved against the complete list on the server so priorities always stay unique. - Fixed notification message text, icon, and close button being hardcoded to white, making them unreadable against light backgrounds (most notably the warning notification's light orange background). - Fixed some static text was not translated. - Fixed chakra theme variable conflict with css root variables. = 1.2.5 — 2026-07-31 = * Added: Custom post type entries (posts, custom field values, featured image, and taxonomy terms) are now included when exporting or importing "All" or "Post Types". * Improved: Front-end scripts and styles are now only loaded on pages that actually use an ECM shortcode, instead of on every page. * Improved: Export archives are now written to a protected directory with an unguessable filename. * Improved: Imported content is restricted to ECM-owned post types and registered custom field meta keys. * Fixed: Saving user profile custom fields could overwrite unrelated WordPress user data, including user roles. * Fixed: Gallery and Image custom field values not saving correctly on the user profile screen. * Fixed: Broken image URL for Gallery custom fields holding more than one image on the user profile screen. * Fixed: The True/False field default message returning translation file metadata instead of an empty string. = 1.2.5 — 2026-08-11 = * Security: Hardened AJAX and REST endpoints across the plugin and its addons (bookmark, claim, upvote, reactions, view counter, reviews) with nonce verification and capability checks. * Security: Added input sanitization (text, email, URL) and output escaping across request handlers and frontend templates. * Security: Sanitized custom CSS color settings to prevent style injection. * Security: Field-type-aware sanitization when saving custom field and post meta values. * Fixed: Script and style asset loading issues. * Fixed: Custom post type entries (posts, custom field values, featured image, and taxonomy terms) not being included when exporting or importing "All" or "Post Types". * Fixed: User profile custom fields save process could overwrite unrelated WordPress user data, including user roles. * Fixed: Gallery and Image custom field values not saving correctly when used on the user profile screen. * Fixed: Broken image URL for Gallery custom fields holding more than one image on the user profile screen. = 1.2.4 — 2026-06-14 = * Added: Clear, plain-language disclosure of the data shared when submitting deactivation feedback ("What data do we collect?"). * Added: "External Services" section documenting the connection to store.kodezen.com for updates, license validation, and optional feedback. * Improved: Plugin updates now only install packages served from the official update server (supply-chain hardening). * Fixed: Deactivation feedback popup not appearing on the Plugins screen. = 1.2.3 — 2026-06-04 = * Fixed: Image upload field page blank issue in Single Image Custom Field. * Fixed: Image delete issue from Single Image Custom Field. = 1.2.2 — 2026-04-22 = * Added: StoreEngine SDK License feature. = 1.2.0 — 2026-03-02 = * Added: User review list feature and shortcode docs. * Added: ECM data export and import features. * Added: Tools page. * Added: Create/update WP user with custom meta. * Added: Frontend submission feature with role and submission status control. * Added: Anonymous frontend submission control. * Added: Claim count system with claim addon and shortcode docs. * Added: Bookmark count system with bookmark addon and shortcode docs. * Added: Shortcode docs into tools page with copy-to-clipboard. * Fixed: Settings Builder routing and data save issues in dynamic settings. * Fixed: Post menu sort order ajax request payload. * Fixed: Category page blank issue. * Fixed: Review form UI break issue. * Fixed: Bookmark status mismatch issue. * Fixed: ECM bookmark addon shortcode not working in frontend. * Fixed: Custom taxonomy menu order sort issue. * Changed: Claim shortcode docs. * Changed: Separated the addons menu from the main settings. * Changed: ECM settings data save structure. * Removed: Enable specific post type option for addons from addons settings. == Upgrade Notice == = 1.3.1 = Security release: protects password fields, blocks visitor term creation, enforces the CAPTCHA setting and keeps unreviewed uploads private. Also adds a redesigned upload field and fixes several front-end shortcode issues. Recommended for all users. = 1.3.0 = Adds anonymous frontend submission with file uploads, edit/delete for visitors, an `[ecm_fields]` shortcode and a reorganised Shortcodes tab. Rebuild assets if you build from source. = 1.2.10 = Compatibility and security release: fixes PHP 7.4 errors in AJAX requests and tightens output escaping. = 1.2.9 = WordPress.org compliance release: Pro features move to the separate Pro package, no remote scripts, and documented external services. = 1.2.8 = Repackaged release: removes a stray `trunk` folder that was accidentally included in the 1.2.7 download. No functional changes. = 1.2.7 = Fixes the licence SDK being skipped alongside other StoreEngine plugins, hardens update validation, reduces licence-server calls, and fixes taxonomy submenu placement and post list state loss. = 1.2.6 = Fixes category managers being unable to create categories, adds capability checks to React admin routes, resolves duplicate post priorities from manual input, fixes unreadable white notification text, and corrects two untranslatable strings. = 1.2.5 = Security hardening for AJAX/REST endpoints, fixes user profile fields overwriting unrelated user data (including roles), adds post content to export/import, and stops front-end assets loading on every page. Updating is strongly recommended. = 1.2.4 = Adds clear disclosure of data shared during deactivation feedback, documents external services, and hardens plugin update installs. = 1.2.3 = Fixes blank page and delete issues in the Single Image Custom Field.