Token导航 LogoToken导航

Agent Skill · 效率

openclaw-ghost-cms(OpenClaw ghost CMS 部署)

openclaw-ghost-cms 用于辅助部署、云资源、容器和基础设施运维,适合在 OpenClaw 中需要检查配置、整理部署步骤或排查环境问题时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

openclaw-ghost-cms 是效率类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为接触敏感数据;许可证为 MIT-0,第三方扫描有提醒项,按安装量在效率类的 21,003 个 Skill 里排第 15,905。

总安装 2,987周安装 127GitHub Stars 公开资料未说明下载 1,046核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
1.0.0

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:openclaw-ghost-cms(OpenClaw ghost CMS 部署)
来源仓库:https://github.com/themeix/openclaw-ghost-cms
安装命令:
openclaw skills install openclaw-ghost-cms
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install openclaw-ghost-cms

这个 Skill 是做什么的

效率类 Skill 把重复的整理、汇总、转换工作交给助手完成,减少手工复制粘贴。

支持 Ghost CMS 全生命周期管理,涵盖安装、主题开发、API 集成与故障排除。适用于内容创作者或技术博主,提供 Handlebars 模板调试与动态路由配置。当用户需要搭建博客或管理发布系统时触发,返回分步操作指南与常见问题解决方案。需配置 SMTP 与数据库连接,主题开发建议启用热重载以加速迭代。

CLI 命令依赖 Node.js 环境,生产部署推荐使用 PM2 守护进程确保持续运行。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install openclaw-ghost-cms;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

openclaw-ghost-cms 怎么安装?

在终端执行 openclaw skills install openclaw-ghost-cms。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

openclaw-ghost-cms 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

openclaw-ghost-cms 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

openclaw-ghost-cms 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

openclaw-ghost-cms 用的人多吗?

公开数据是累计安装 2,987 次,近一周安装 127 次,下载 1,046 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

openclaw-ghost-cms 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理效率类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要厂商级技术支持和 SLA 的生产系统。

效率类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
github

GitHub 代码协作 · OpenClaw

7,632,918545需要联网MIT-0通过
nano-pdf

Nano PDF 文档 · OpenClaw

4,249,476231需要联网MIT-0通过
auto-updater

自动更新程序 · OpenClaw

2,964,063386操作浏览器MIT-0通过
video-frames

视频帧 · OpenClaw

2,621,304112需要联网MIT-0通过
gemini

Gemini 助手 · OpenClaw

2,547,39648需要联网MIT-0有提醒
openclaw-ghost-cms

OpenClaw ghost CMS 部署 · 本页

2,987—接触敏感数据MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Ghost CMS Skill

A comprehensive skill for Ghost CMS development, theme creation, and management.

Description

This skill provides complete Ghost CMS development support including installation, theme development with Handlebars, Ghost CLI commands, API integration (Content and Admin APIs), GScan validation, custom theme settings, dynamic routing, local development workflows, publishing, and deployment best practices.

Usage

Use this skill when you need help with:

  • Installing and configuring Ghost (local and production)
  • Using Ghost CLI commands for site management
  • Creating and customizing Ghost themes with Handlebars
  • Working with theme helpers (data, functional, utility)
  • Setting up theme structure and templates
  • Implementing custom theme settings
  • Using Content API and Admin API
  • Validating themes with GScan
  • Managing assets and images
  • Implementing dynamic routing with routes.yaml
  • Setting up local development workflow
  • Publishing and deploying themes
  • Troubleshooting Ghost issues
  • Security and performance optimization

Commands & Tools

Installation & Setup

# Install Ghost CLI globally
npm install -g ghost-cli@latest

# Install Ghost locally for development
ghost install local

# Install Ghost in production
ghost install

Essential Ghost CLI Commands

ghost start      # Start Ghost
ghost stop       # Stop Ghost
ghost restart    # Restart Ghost
ghost update     # Update Ghost to latest version
ghost ls         # List Ghost instances
ghost log        # View logs

Theme Development

Required Theme Structure
your-theme/
├── assets/
│   ├── css/
│   ├── fonts/
│   ├── images/
│   └── js/
├── partials/
│   ├── header.hbs
│   └── footer.hbs
├── default.hbs       # Base layout
├── index.hbs        # Required - post list
├── post.hbs         # Required - single post
├── page.hbs         # Static pages
├── tag.hbs          # Tag archive
├── author.hbs        # Author archive
├── error.hbs        # Error pages
└── package.json     # Required - theme metadata
Required Helpers (Must Include)
{{ghost_head}}     <!-- In <head> section -->
{{ghost_foot}}     <!-- Before </body> -->
{{body_class}}     <!-- Dynamic body classes -->
{{asset "path"}}   <!-- Link to theme assets -->
Common Data Helpers
{{#post}}...{{/post}}              <!-- Post context -->
{{#foreach posts}}...{{/foreach}}  <!-- Loop posts -->
{{title}}                         <!-- Page/post title -->
{{content}}                       <!-- Post content -->
{{excerpt}}                       <!-- Post excerpt -->
{{date format="YYYY-MM-DD"}}       <!-- Format dates -->
{{img_url feature_image}}          <!-- Image URL -->
{{url}}                           <!-- Current page URL -->
{{navigation}}                    <!-- Main navigation -->
{{pagination}}                    <!-- Pagination links -->
Custom Templates
<!-- Post-specific: post-my-slug.hbs -->
<!-- Page-specific: page-about.hbs -->
<!-- Tag-specific: tag-javascript.hbs -->
<!-- Author-specific: author-john.hbs -->

package.json Configuration

{
  "name": "your-theme-name",
  "version": "1.0.0",
  "description": "Brief description",
  "license": "MIT",
  "author": {
    "name": "Your Name",
    "email": "your@email.com"
  },
  "screenshots": {
    "desktop": "assets/screenshot-desktop.jpg",
    "mobile": "assets/screenshot-mobile.jpg"
  },
  "config": {
    "posts_per_page": 10,
    "image_sizes": {
      "xxl": { "width": 2000 },
      "xl": { "width": 1200 },
      "lg": { "width": 1000 },
      "md": { "width": 800 },
      "sm": { "width": 600 },
      "xs": { "width": 300 }
    },
    "card_assets": true,
    "custom": {
      "color_scheme": {
        "type": "select",
        "default": "Light",
        "options": ["Light", "Dark", "Auto"]
      },
      "accent_color": {
        "type": "color",
        "default": "#3eb0ef"
      }
    }
  }
}

Content API Usage

// Install
npm install @tryghost/content-api

// Initialize
const GhostContentAPI = require('@tryghost/content-api');

const api = new GhostContentAPI({
  url: 'https://your-site.com',
  key: 'content_api_key',
  version: 'v5.0'
});

// Fetch posts
api.posts.browse({limit: 5, include: 'tags,authors'})
  .then((posts) => {
    posts.forEach((post) => console.log(post.title));
  });

// Filter posts
api.posts.browse({
  filter: 'tag:javascript+featured:true',
  limit: 10
});

// Fetch single post
api.posts.read({slug: 'post-slug'});

Admin API - Complete Reference

The Admin API provides comprehensive content management capabilities with three authentication methods:

Authentication Methods

1. Integration Token Authentication (Recommended for server-side apps)

  • Create Custom Integration in Ghost Admin
  • Get Admin API key (id:secret format)
  • Tokens last 5 minutes
  • Generate JWT tokens server-side only

2. Staff Access Token Authentication (For specific users)

  • Each user creates their own token in settings
  • Authenticates with role-based permissions
  • Tokens are short-lived JWTs
  • Suitable for user-specific applications

3. User Authentication (For browser apps with login)

  • Email + password → session cookie
  • Requires 2FA support
  • Must include Origin header (CSRF protection)
  • Safe for browser environments
Available Endpoints (All stable)
ResourceMethodsDescription
/posts/Browse, Read, Edit, Add, Copy, DeleteFull post management
/pages/Browse, Read, Edit, Add, Copy, DeleteStatic page management
/tags/Browse, Read, Edit, Add, DeleteTag management
/tiers/Browse, Read, Edit, AddMembership tier management
/newsletters/Browse, Read, Edit, AddNewsletter management
/offers/Browse, Read, Edit, AddDiscount offers for members
/members/Browse, Read, Edit, AddMember management with subscriptions
/users/Browse, ReadUser management
/images/UploadImage upload and storage
/themes/Upload, ActivateTheme management
/site/ReadSite configuration
/webhooks/Edit, Add, DeleteWebhook configuration
Token Generation Examples

Bash with OpenSSL:

#!/usr/bin/env bash

KEY="YOUR_ADMIN_API_KEY"
IFS=':' read ID SECRET <<< "$KEY"

NOW=$(date +'%s')
FIVE_MINS=$(($NOW + 300))
HEADER="{\"alg\": \"HS256\",\"typ\": \"JWT\", \"kid\": \"$ID\"}"
PAYLOAD="{\"iat\":$NOW,\"exp\":$FIVE_MINS,\"aud\": \"/admin/\"}"

base64_url_encode() {
  printf '%s' "${1}" | base64 | tr -d '=' | tr '+' '-' | tr '/' '_'
}

header_base64=$(base64_url_encode "$HEADER")
payload_base64=$(base64_url_encode "$PAYLOAD")

header_payload="${header_base64}.${payload_base64}"
signature=$(printf '%s' "${header_payload}" | openssl dgst -binary -sha256 -mac HMAC -macopt hexkey:$SECRET | base64_url_encode)

TOKEN="${header_payload}.${signature}"
curl -H "Authorization: Ghost $TOKEN" -H "Content-Type: application/json" \
  -d '{"posts":[{"title":"Hello world"}]}' \
  "http://localhost:2368/ghost/api/admin/posts/"

JavaScript (without client library):

const jwt = require('jsonwebtoken');
const axios = require('axios');

const key = 'YOUR_ADMIN_API_KEY';
const [id, secret] = key.split(':');

const token = jwt.sign({}, Buffer.from(secret, 'hex'), {
  keyid: id,
  algorithm: 'HS256',
  expiresIn: '5m',
  audience: `/admin/`
});

const url = 'http://localhost:2368/ghost/api/admin/posts/';
const headers = { Authorization: `Ghost ${token}` };
const payload = { posts: [{ title: 'Hello World' }] };
axios.post(url, payload, { headers })
  .then(response => console.log(response))
  .catch(error => console.error(error));

Python:

import requests
import jwt
from datetime import datetime

key = 'YOUR_ADMIN_API_KEY'
id, secret = key.split(':')

iat = int(datetime.now().timestamp())
header = {'alg': 'HS256', 'typ': 'JWT', 'kid': id}
payload = {
  'iat': iat,
  'exp': iat + 5 * 60,
  'aud': '/admin/'
}

token = jwt.encode(payload, bytes.fromhex(secret), algorithm='HS256', headers=header)

url = 'http://localhost:2368/ghost/api/admin/posts/'
headers = {'Authorization': 'Ghost {}'.format(token)}
body = {'posts': [{'title': 'Hello World'}]}
r = requests.post(url, json=body, headers=headers)
print(r)
Members API

Create Member:

api.members.add({
  email: 'user@example.com',
  name: 'Jamie',
  labels: [{ name: 'VIP', slug: 'vip' }],
  newsletters: [{ id: 'newsletter_id' }]
});

Update Member:

api.members.edit({
  id: 'member_id',
  name: 'Updated Name',
  note: 'VIP customer'
});

Member Fields:

  • email (required)
  • name
  • note
  • labels (array with name and slug)
  • newsletters (array of IDs)
  • status (free, paid, comped)
Newsletters API

Create Newsletter:

api.newsletters.add({
  name: 'My Newsletter',
  description: 'Description',
  sender_reply_to: 'newsletter', // or 'support'
  status: 'active',
  subscribe_on_signup: true,
  show_header_icon: true,
  show_header_title: true,
  title_font_category: 'sans_serif',
  title_alignment: 'center',
  show_feature_image: true,
  body_font_category: 'sans_serif',
  show_badge: true
});

Newsletter Fields:

  • name (required)
  • description
  • status (active, archived)
  • sender_name
  • sender_email (requires verification)
  • sender_reply_to (newsletter, support)
  • subscribe_on_signup
  • header_image (1200x600 recommended)
  • show_header_icon
  • show_header_title
  • show_header_name
  • title_font_category (serif, sans_serif)
  • title_alignment
  • show_feature_image
  • body_font_category (serif, sans_serif)
  • footer_content
  • show_badge
Offers API

Create Offer:

api.offers.add({
  name: 'Black Friday',
  code: 'black-friday',
  display_title: 'Black Friday Sale!',
  display_description: '10% off on yearly plan',
  type: 'percent', // or 'fixed'
  cadence: 'year', // or 'month'
  amount: 12, // percentage or cents
  duration: 'once', // 'once', 'forever', 'repeating'
  tier: { id: 'tier_id' },
  status: 'active'
});

Offer Fields:

  • name (required, unique)
  • code (required, short code)
  • display_title
  • display_description
  • type (percent, fixed)
  • cadence (year, month)
  • amount (in smallest currency unit)
  • duration (once, forever, repeating)
  • duration_in_months (for repeating)
  • currency (required for fixed type)
  • status (active, archived)
  • redemption_count
  • tier (tier object with id and name)
Posts API - Card Visibility

Control who sees specific cards in posts:

// Card with visibility controls
const postWithVisibility = {
  title: 'Premium Content',
  lexical: {
    root: {
      type: 'root',
      children: [
        {
          type: 'html',
          html: '<div>Premium analysis...</div>',
          visibility: {
            web: {
              nonMember: false,
              memberSegment: 'status:free,status:-free'
            },
            email: {
              memberSegment: 'status:free'
            }
          }
        }
      ]
    }
  }
};

Visibility Options:

  • web.nonMember: true/false (visible to non-members)
  • web.memberSegment: NQL filter (e.g., "status:free" for all members, "status:-free" for paid only)
  • email.memberSegment: NQL filter for email delivery

Common Configurations:

Visible to all members (free and paid), hidden from non-members:

{
  "visibility": {
    "web": { "nonMember": false, "memberSegment": "status:free,status:-free" },
    "email": { "memberSegment": "status:free,status:-free" }
  }
}

Visible to paid members only:

{
  "visibility": {
    "web": { "nonMember": false, "memberSegment": "status:-free" },
    "email": { "memberSegment": "status:-free" }
  }
}
Images API

Upload Image:

const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('file', fs.createReadStream('/path/to/image.jpg'));
form.append('ref', 'path/to/image.jpg');
form.append('purpose', 'image'); // 'image', 'profile_image', or 'icon'

fetch('http://localhost:2368/ghost/api/admin/images/upload/', {
  method: 'POST',
  headers: {
    'Authorization': `Ghost ${token}`,
    'Accept-Version': 'v5.0'
  },
  body: form
})
  .then(res => res.json())
  .then(data => console.log(data));

Image Upload Fields:

  • file (required) - Blob or File object
  • purpose - 'image' (default), 'profile_image', or 'icon'
  • ref (optional) - Reference identifier

Supported Formats:

  • image, icon: WEBP, JPEG, GIF, PNG, SVG
  • profile_image: Must be square, WEBP, JPEG, GIF, PNG, SVG
Admin API JavaScript Client

Installation:

npm install @tryghost/admin-api
# or
yarn add @tryghost/admin-api

Usage:

const GhostAdminAPI = require('@tryghost/admin-api');

const api = new GhostAdminAPI({
  url: 'http://localhost:2368/',
  key: 'YOUR_ADMIN_API_KEY',
  version: "v6.0"
});

// Browse posts
api.posts.browse();

// Read post
api.posts.read({id: 'abcd1234'});

// Add post
api.posts.add({
  title: 'My first draft API post',
  lexical: '{"root":{"children":[...]}}' // Lexical JSON structure
});

// Edit post
api.posts.edit({
  id: 'abcd1234',
  title: 'Renamed my post',
  updated_at: post.updated_at
});

// Delete post
api.posts.delete({id: 'abcd1234'});

// Upload image
api.images.upload({
  file: '/path/to/local/file'
});

Complete Publishing Example with Image Processing:

const GhostAdminAPI = require('@tryghost/admin-api');
const path = require('path');
const fs = require('fs');

const api = new GhostAdminAPI({
  url: 'http://localhost:2368/',
  version: "v6.0",
  key: 'YOUR_ADMIN_API_KEY'
});

function processImagesInHTML(html) {
  const imageRegex = /="([^"]*?(?:\.jpg|\.jpeg|\.gif|\.png|\.svg|\.webp))"/gmi;
  const imagePromises = [];

  let result;
  while((result = imageRegex.exec(html)) !== null) {
    const file = result[1];
    imagePromises.push(api.images.upload({
      ref: file,
      file: path.resolve(file)
    }));
  }

  return Promise.all(imagePromises)
    .then(images => {
      images.forEach(image => {
        html = html.replace(image.ref, image.url);
      });
      return html;
    });
}

let html = '<p>My test post content.</p><figure><img src="/path/to/my/image.jpg" /><figcaption>My awesome photo</figcaption></figure>';

processImagesInHTML(html)
  .then(html => {
    return api.posts.add(
      {title: 'My Test Post', html},
      {source: 'html'}
    );
  })
  .then(res => console.log(JSON.stringify(res)))
  .catch(err => console.log(err));
API Best Practices
  1. Authentication

- Use Integration tokens for server-side apps - Use Staff tokens for user-specific operations - Use User authentication only for browser apps - Never expose Admin API keys in client-side code - Regenerate tokens periodically (5-minute lifetime)

  1. Pagination

- Default limit: 15 records - Use page and limit parameters - Check meta.pagination for navigation - Implement pagination UI based on total/pages

  1. Error Handling

- Handle HTTP status codes appropriately - Check meta for validation errors - Implement retry logic for rate limiting - Log errors with context

  1. Rate Limiting

- Be mindful of API rate limits - Implement exponential backoff for retries - Cache responses when appropriate

  1. Versioning

- Always include Accept-Version header - Specify minimum API version your code works with - Test against different Ghost versions

Admin API Usage (Server-side)

const GhostAdminAPI = require('@tryghost/admin-api');

const api = new GhostAdminAPI({
  url: 'https://your-site.com',
  key: 'admin_api_key',
  version: 'v5.0'
});

// Create post
const post = await api.posts.add({
  title: 'My New Post',
  html: '<p>Content</p>',
  status: 'published'
});

// Update post
await api.posts.edit({
  id: post.id,
  title: 'Updated Title'
});

Custom Theme Settings

Define in package.json:

{
  "config": {
    "custom": {
      "show_featured_posts": {
        "type": "boolean",
        "default": true
      },
      "posts_per_page": {
        "type": "select",
        "default": "6",
        "options": ["3", "6", "9", "12"]
      }
    }
  }
}

Use in templates:

{{#if @custom.show_featured_posts}}
  <section class="featured">
    {{#get "posts" filter="featured:true" limit="3"}}
      {{#foreach posts}}
        <article>{{title}}</article>
      {{/foreach}}
    {{/get}}
  </section>
{{/if}}

Theme Validation with GScan

# Install GScan
npm install -g gscan

# Validate theme
gscan your-theme-directory

# Validate with specific Ghost version
gscan your-theme-directory --version 5.0

# Output as JSON
gscan your-theme-directory --format json

# Online validation
# Visit https://gscan.ghost.org and upload theme zip

Common validation checks:

  • Missing required templates (index.hbs, post.hbs)
  • Missing required helpers (ghost_head, ghost_foot, body_class)
  • Invalid package.json structure
  • Deprecated helper usage
  • Missing screenshot images
  • Incorrect image references

Dynamic Routing (routes.yaml)

routes:
  /about/:
    template: about
  /blog/:
    template: blog

collections:
  /blog/:
    permalink: /blog/{slug}/
    template: blog-post
    filter: tag:blog

taxonomies:
  tag: /tag/{slug}/
  author: /author/{slug}/

Local Development Workflow

# Start Ghost locally
ghost start

# Access admin at http://localhost:2368/ghost
# Site at http://localhost:2368/

# Development cycle:
# 1. Edit templates in content/themes/your-theme/
# 2. Edit CSS/JS in assets/
# 3. Restart for HBS changes: ghost restart
# 4. CSS/JS changes: instant refresh
# 5. Test at http://localhost:2368/
# 6. Validate with GScan

Publishing Theme

# Create theme zip (exclude unnecessary files)
cd content/themes/your-theme
zip -r ../your-theme.zip . -x "node_modules/*" ".git/*"

# Upload via Ghost Admin
# Settings > Design > Upload theme

Configuration

Ghost CLI Configuration

# Edit Ghost config
ghost config

# Set URL
ghost config url https://your-site.com

# Set mail configuration
ghost config mail {transport, options}

# Restart after config changes
ghost restart

Production Setup (Ubuntu)

# Full production stack (Nginx, SSL, Systemd)
ghost install

# With custom database
ghost install --db=mysql --dbhost=localhost --dbuser=ghost --dbpass=password --dbname=ghost_prod

Best Practices

Theme Development

  1. Scope CSS classes to avoid conflicts with post content
  2. Use semantic HTML structure throughout templates
  3. Include required helpers in all templates
  4. Test responsive design across devices
  5. Optimize images using Ghost's automatic resizing
  6. Validate frequently with GScan during development
  7. Keep package.json updated with correct version and metadata

Security

  1. Never expose Admin API keys in client-side code
  2. Use environment variables for sensitive data
  3. Implement proper authentication for custom integrations
  4. Keep Ghost updated with ghost update
  5. Validate all inputs in custom scripts
  6. Use HTTPS in production

Performance

  1. Enable image optimization in theme config
  2. Use appropriate image sizes for different contexts
  3. Minify CSS/JS assets
  4. Implement lazy loading for images
  5. Use CDN for static assets
  6. Enable Ghost caching
  7. Optimize database queries

API Usage

  1. Use pagination for large datasets
  2. Filter data server-side when possible
  3. Include related resources in single queries when needed
  4. Cache responses when appropriate
  5. Handle errors gracefully with try/catch
  6. Use the latest API version

Troubleshooting

Theme Not Loading

# Check Ghost status
ghost ls

# Restart Ghost
ghost restart

# View logs
ghost log

CSS/JS Not Updating

  • Clear browser cache
  • Verify file paths in templates
  • Check assets are in correct directory
  • Restart Ghost if needed

Template Errors

  • Check syntax with GScan
  • Verify all required helpers present
  • Check for unclosed blocks {{#if}}...{{/if}}
  • Review Ghost logs for specific errors

Permission Issues

  • Ensure correct file permissions
  • Check Ghost is running as correct user
  • Verify directory ownership

Resources

Comprehensive API Documentation

  • Complete Ghost API Reference: https://docs.ghost.org/llms-full.txt

- Full Admin API documentation with all endpoints - Authentication methods (Integration tokens, Staff access tokens, User authentication) - Token generation examples in multiple languages (Bash, JavaScript, Ruby, Python) - Members API (create, update, browse) - Newsletters API (create, update, sender email validation) - Offers API (create, update, pricing tiers) - Pages API management - Posts API with card visibility controls - Image upload API - Admin API JavaScript client usage - Complete request/response examples - Pagination and filtering guidelines - Error handling patterns

Official Documentation

  • Ghost Docs: https://ghost.org/docs/
  • Theme Development: https://ghost.org/docs/themes/
  • Ghost CLI: https://ghost.org/docs/ghost-cli/
  • Content API: https://ghost.org/docs/content-api/
  • Admin API: https://ghost.org/docs/admin-api/
  • GScan: https://gscan.ghost.org/
  • Community Forum: https://forum.ghost.org/
  • Ghost GitHub: https://github.com/TryGhost/Ghost

Categories

web-development, cms, theming, handlebars, blogging, publishing

Author

Published by Themeix

License

MIT

Version

1.0.0

平台分布

OpenClaw

72.93%
按下载量换算763

安全审计

VirusTotal

未展示

ClawScan

通过

Static analysis

可疑

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills