Posts and Pages

Unfold CMS provides a full-featured content management system for blog posts, static pages, and landing pages. The admin panel offers a rich editing experience with categories, tags, featured images, SEO fields, and scheduled publishing.

Blog Posts

Creating a Post

Navigate to Blog > Posts in the admin panel and click Create Post. The post editor provides the following fields:

Field Description
Title The post title (used in <h1> and browser title)
Slug URL-friendly identifier (auto-generated from title)
Content Rich text editor with formatting, images, and media
Excerpt Short summary for post listings and meta descriptions
Featured Image Primary image for post cards and Open Graph
Categories One or more categories for organization
Allow Comments Enable/disable comments for this post
Is Published Toggle between draft and published states
Posted At Publication date (future dates enable scheduled publishing)

Post States

Posts exist in one of three states:

State Description
Draft is_published = false. Not visible to the public.
Published is_published = true and posted_at is in the past. Visible on the site.
Scheduled is_published = true and posted_at is in the future. Will auto-publish when the date arrives.

The admin dashboard shows counts for each state: total posts, published, drafts, and scheduled.

Scheduled Publishing

To schedule a post for future publication:

  1. Write your post content
  2. Set Is Published to on
  3. Set Posted At to the desired future date and time
  4. Save the post

The CMS scheduler runs every minute and automatically publishes posts when their scheduled date arrives. This requires the cron job to be configured:

* * * * * cd /path-to-project && php artisan schedule:run >> /dev/null 2>&1

Note: Scheduled publishing works synchronously — no queue workers are needed.

Categories

Categories provide hierarchical organization for your blog posts. A post can belong to multiple categories.

Managing Categories:

  • Navigate to Blog > Categories in the admin panel
  • Categories support parent-child relationships for nested organization
  • Each category has a name, slug, and optional parent category
  • Categories with posts or child categories cannot be deleted (deletion protection)
  • Drag-and-drop reordering is supported
  • The system prevents circular references (a category cannot be its own parent or ancestor)

Category hierarchy example:

Technology
├── Web Development
│   ├── Frontend
│   └── Backend
├── Mobile
└── AI & ML

Post Index and Filtering

The posts index page provides:

  • Stats bar — Quick counts for total, published, drafts, scheduled, and comments-enabled posts
  • Search — Full-text search across post titles and content
  • Category filter — Filter posts by category
  • Status filter — Filter by published, draft, or scheduled
  • Pagination — Server-side pagination for large post collections
  • Bulk actions — Select multiple posts for batch operations

Slug History and Redirects

When you change a post's slug, the old slug is preserved in a history table. Visitors accessing the old URL are automatically redirected (301) to the new URL, preventing broken links and preserving SEO value.

When blog.show_related_posts is enabled (default: true), the public post view displays related posts based on shared categories. This encourages visitors to explore more content.

Posts Per Page

The number of posts displayed per page on the public blog listing is controlled by the blog.posts_per_page setting (default: 10). This can be changed in Settings > Blog in the admin panel.

Pages

Static pages are similar to posts but serve as standalone content (About, Contact, Privacy Policy, etc.). Pages have their own URL structure defined by the permalink settings.

Page URL Structure

The page permalink structure is configured in config/site.php:

'permalinks' => [
    'page_structure' => '/page/%pagename%/',
],

This generates URLs like /page/about/, /page/privacy-policy/, etc.

Default Pages

During installation, the following default pages are created:

  • About — Company/site information
  • Contact — Contact form page
  • Privacy Policy — Privacy policy template

You can modify these pages and create new ones from the admin panel.

Content Editor

The content editor supports:

  • Rich text formatting — Headings, bold, italic, lists, blockquotes
  • Image embedding — Insert images from the media library or upload directly
  • Code blocks — Syntax-highlighted code snippets
  • Links — Internal and external links
  • Media embedding — Videos, iframes, and other embedded content

Image Uploads in Editor

Images can be uploaded directly within the editor. The upload system:

  • Validates file types (images only)
  • Enforces size limits based on media.max_upload_size
  • Stores images in the public uploads directory
  • Returns the URL for immediate embedding

SEO Fields

Every post and page includes SEO fields for search engine optimization:

Field Description
Meta Title Custom title for search results (overrides post title)
Meta Description Description shown in search results
Open Graph Image Custom image for social media sharing
Canonical URL Canonical URL tag for duplicate content prevention
No Index Exclude this page from search engine indexing

When SEO fields are left empty, the CMS automatically generates them from the post title, excerpt, and featured image.

Content Types

Unfold CMS supports four content types, all managed through a single unified system:

Type Description Where It Appears
Post Blog articles with categories, comments, and publishing dates. The primary content type for blogs and news sites. Blog listing, category archives, search results, RSS feed
Page Static pages like About, Contact, and Privacy Policy. Pages don't belong to categories and aren't included in the blog feed. Standalone URLs (e.g., /page/about/)
Landing Page Marketing and campaign pages designed for focused conversion. Landing pages use custom layouts without the standard blog sidebar and navigation. Standalone URLs with custom layouts
Block Content items that power homepage sections — features, testimonials, stats, team members, etc. Blocks are managed through the section builder, not the post editor. Homepage sections

Each type shares the same rich editor, SEO fields, and media capabilities. The type determines where and how the content is displayed on the public site.