Easy Content Manager (ECM) – Custom Post Types, Custom Fields & Content Management
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 Built In – 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 – 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 – 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. 🔌 Addons (Modular Content & Engagement Extensions) ECM includes a modular addon system that lets you extend content functionality only when needed. Each addon can be enabled or disabled individually from a centralized settings panel. 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. External Services Easy Content Manager (ECM) connects to one external service operated by the plugin author (Kodezen) — the StoreEngine license server at https://store.kodezen.com — for plugin software updates, license validation, and optional feedback. It is used only in the situations described below; no data is sent during normal day-to-day use of the content-management features. Plugin updates & license validation. When you check for or install an update — and, for premium add-ons, when you activate or validate a license key — the plugin contacts https://store.kodezen.com to retrieve update information and the plugin package and to verify the license. Data sent: your site URL, the plugin slug and version, and your WordPress and PHP versions; premium add-ons additionally send the license key you entered. Update packages are downloaded only from the kodezen.com domain — a package URL pointing to any other host is rejected before installation. 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. Service provider: Kodezen. Terms of Service: https://kodezen.com/terms-and-conditions/ Privacy Policy: https://store.kodezen.com/privacy-policy/
Top keywords
- content29×1.92%
- post29×1.92%
- custom27×1.79%
- field19×1.26%
- types18×1.19%
- ecm17×1.13%
- fields17×1.13%
- without16×1.06%
- post types14×0.93%
- data13×0.86%
- type11×0.73%
- wordpress11×0.73%
Text Modules
Use the new Text Modules custom post type and display a text module by either shortcode or widget. Have you ever wanted to use some pieces of text information more than once? For instance, contact information such as a postal address? Or some slogan, motto or claim? This is exactly when Text Modules kicks in. Usage This plugin registers a simple post type for text modules. A text module can be accessed either via shortcode (by means of the text module’s ID or slug) or via a new Tex Modules widget. Filters In order to customize certain aspects of the plugin, it provides you with several filters. For each of these, a short description as well as a code example on how to alter the default behavior is given below. Just put the according code snippet in your theme’s functions.php file or your customization plugin, or to some other appropriate place. text_modules_after_widget_content This filter lets you alter the HTML after the widget content. /** * Filter the HTML after the widget content. * * @param string $after_widget_content Some HTML after the widget content. */ add_filter( 'text_modules_after_widget_content', function() { return ' '; } ); text_modules_before_widget_content This filter lets you alter the HTML before the widget content. /** * Filter the HTML before the widget content. * * @param string $before_widget_content Some HTML before the widget content. */ add_filter( 'text_modules_before_widget_content', function() { return ' '; } ); text_modules_post_type Yes, you can alter the post type (slug). /** * Filter the post type. * * @param string $post_type Post type. */ add_filter( 'text_modules_post_type', function() { return 'exotic_stuff'; } ); text_modules_post_type_args If you want to alter a specific post type argument but you can’t find a fitting filter, there’s text_modules_post_type_args, which provides you with the complete args array. /** * Filter the post type args. * * @param array $args Post type args. */ add_filter( 'text_modules_post_type_args', function( $args ) { // Use hierarchical external content $args[ 'hierarchical' ] = TRUE; return $args; } ); text_modules_post_type_description The post type description can be customized by using the text_modules_post_type_description filter. /** * Filter the post type description. * * @param string $description Post type description. */ add_filter( 'text_modules_post_type_description', function() { // Provide a description return 'Simple post type for text modules.'; } ); text_modules_post_type_labels In case you don’t like the labels, easily adapt them to your liking. /** * Filter the post type labels. * * @param array $labels Post type labels. */ add_filter( 'text_modules_post_type_labels', function( $labels ) { // A little more horror, please... $labels[ 'not_found' ] = 'ZOMG, no text module found!!1!!1!!oneone!!!1!eleven!1!'; return $labels; } ); text_modules_post_type_supports This filter provides you with the post type supports. /** * Filter the post type supports. * * @param array $supports Post type supports. */ add_filter( 'text_modules_post_type_supports', function( $supports ) { // Let's add revisions for our post type if ( ! in_array( 'revisions', $supports ) ) { $supports[] = 'revisions'; } return $supports; } ); text_modules_shortcode_apply_do_shortcode By default, do_shortcode() will be called on the shortcode output. Of course, you can change that. /** * Filter if the shortcode should apply do_shortcode() to the output. * * @param bool $do_shortcode Should the shortcode apply do_shortcode()? */ add_filter( 'text_modules_shortcode_apply_do_shortcode', '__return_false' ); text_modules_shortcode_callback In case you would like to adapt how the shortcode data is handled, you can provide your own shortcode callback. This can either be a string holding the function name, or an array with either a class name or an object, and the according method. /** * Filter the shortcode callback. * * @param array|string $callback Shortcode callback. */ add_filter( 'text_modules_shortcode_callback', function() { return 'my_text_modules_shortcode_callback'; } ); text_modules_shortcode_id_attribute_name This filter lets you alter the shortcode’s ‘id’ attribute name. /** * Filter the 'id' shortcode attribute name. * * @param string $name Attribute name. */ add_filter( 'text_modules_shortcode_id_attribute_name', function() { return 'post_id'; } ); text_modules_shortcode_output This filter lets you alter the shortcode output. The second parameter holds the shortcode attributes array. /** * Filter the shortcode output. * * @param string $output Shortcode output. * @param array $atts Shortcode attributes array. */ add_filter( 'text_modules_shortcode_output', function( $output ) { return $output . ' Over and out.'; } ); text_modules_shortcode_query_args Also, there’s text_modules_shortcode_query_args, which provides you with the complete args array for the shortcode’s query. /** * Filter the shortcode query args. * * @param array $args Shortcode query args. */ add_filter( 'text_modules_shortcode_query_args', function( $args ) { // Exclude some text modules by ID $args[ 'post__not_in' ] = array( 4, 8, 15, 16, 23, 42 ); return $args; } ); text_modules_shortcode_slug_attribute_name This filter lets you alter the shortcode’s ‘slug’ attribute name. /** * Filter the 'slug' shortcode attribute name. * * @param string $name Attribute name. */ add_filter( 'text_modules_shortcode_slug_attribute_name', function() { return 'post_slug'; } ); text_modules_shortcode_tag This filter lets you alter the shortcode’s tag. /** * Filter the shortcode tag. * * @param string $shortcode_tag Shortcode tag. */ add_filter( 'text_modules_shortcode_tag', function() { return 'text_block'; } ); text_modules_shortcode_use_slug By default, text modules are being queried by their post ID first. Of course, you can change that and use the post slug instead. /** * Filter if the shortcode (query) should use the post slug instead of the post ID. * * @param bool $use_slug Use slug instead of ID? */ add_filter( 'text_modules_shortcode_use_slug', '__return_true' ); text_modules_widget_form_query_args Also, there’s text_modules_widget_form_query_args, which provides you with the complete args array for the widget form’s query. /** * Filter the widget form query args. * * @param array $args Query args. */ add_filter( 'text_modules_widget_form_query_args', function( $args ) { // Exclude some text modules by ID $args[ 'post__not_in' ] = array( 4, 8, 15, 16, 23, 42 ); return $args; } ); Contribution To contribute to this plugin, please see its GitHub repository. If you have a feature request, or if you have developed the feature already, please feel free to use the Issues and/or Pull Requests section. Of course, you can also provide me with translations if you would like to use the plugin in another not yet included language.