重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
code-style by automattic/wordpress-activitypub
npx skills add https://github.com/automattic/wordpress-activitypub --skill code-styleActivityPub 插件特定的规范和架构模式。
class-{name}.php # 常规类。
trait-{name}.php # 特质。
interface-{name}.php # 接口。
namespace Activitypub;
namespace Activitypub\Transformer;
namespace Activitypub\Collection;
namespace Activitypub\Handler;
namespace Activitypub\Activity;
namespace Activitypub\Rest;
翻译时始终使用 'activitypub':
\__( '文本', 'activitypub' );
\_e( '文本', 'activitypub' );
在命名空间内时,始终使用反斜杠转义 WordPress 函数:\get_option()、\add_action() 等。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
完整的 WordPress 编码标准请参见 docs/php-coding-standards.md。
详细的目录组织请参见 docs/php-class-structure.md。
includes/
├── class-*.php # 核心类。
├── activity/ # 活动类型类。
├── collection/ # 集合类。
├── handler/ # 活动处理器。
├── rest/ # REST API 端点。
├── transformer/ # 内容转换器。
└── wp-admin/ # 管理功能。
integration/ # 第三方集成(根目录)。
将 WordPress 内容转换为 ActivityPub 对象。
使用时机: 将文章、评论、用户或自定义内容类型转换为 ActivityPub 格式。
基类: includes/transformer/class-base.php
模式:
namespace Activitypub\Transformer;
class Custom extends Base {
/**
* 将对象转换为 ActivityPub 格式。
*
* @return array ActivityPub 表示形式。
*/
public function transform() {
$object = parent::transform();
// 自定义转换逻辑。
return $object;
}
}
示例:
includes/transformer/class-post.php - 文章转换。includes/transformer/class-comment.php - 评论转换。includes/transformer/class-event.php - 特定于事件的转换。处理来自远程服务器的传入 ActivityPub 活动。
使用时机: 处理传入的 Follow、Like、Create、Delete、Update 等活动。
模式: 每个处理器处理收件箱中的一种活动类型。
示例:
includes/handler/class-follow.php - 处理 Follow 活动。includes/handler/class-create.php - 处理 Create 活动。includes/handler/class-delete.php - 处理 Delete 活动。includes/handler/class-like.php - 处理 Like 活动。实现 ActivityPub 集合(关注者、正在关注等)。
使用时机: 通过 ActivityPub 公开参与者、活动或对象的列表。
示例:
includes/collection/class-followers.php - 关注者集合。includes/collection/class-following.php - 正在关注集合。公开 ActivityPub 端点。
命名空间: ACTIVITYPUB_REST_NAMESPACE
示例:
includes/rest/class-actors-controller.php - 参与者端点。includes/rest/class-inbox-controller.php - 收件箱端点。includes/rest/class-outbox-controller.php - 发件箱端点。includes/rest/class-followers-controller.php - 关注者集合端点。// 获取远程参与者元数据。
$metadata = get_remote_metadata_by_actor( $actor_url );
// 将 ActivityPub 对象转换为 URI 字符串。
$uri = object_to_uri( $object );
// 使用回调函数丰富内容。
$content = enrich_content_data( $content, $pattern, $callback );
// 将 WebFinger 句柄解析为参与者 URL。
$resource = Webfinger::resolve( $handle );
// 获取用户的 ActivityPub 参与者 URL。
$actor_url = get_author_posts_url( $user_id );
// 检查文章类型是否启用了 ActivityPub。
$enabled = \is_post_type_enabled( $post_type );
核心类:
includes/class-activitypub.php - 主要插件初始化。includes/class-dispatcher.php - 向关注者分发活动。includes/class-scheduler.php - 用于异步任务的 WP-Cron 集成。includes/class-signature.php - 用于联邦的 HTTP 签名。活动类型:
includes/activity/class-activity.php - 基础活动类。includes/activity/class-follow.php - Follow 活动。includes/activity/class-undo.php - Undo 活动。集成(参见集成模式):
integration/class-woocommerce.php - WooCommerce 集成。integration/class-buddypress.php - BuddyPress 集成。integration/class-jetpack.php - Jetpack 集成。class Feature {
/**
* 初始化类。
*/
public static function init() {
\add_action( 'init', array( self::class, 'register' ) );
\add_filter( 'activitypub_activity_object', array( self::class, 'filter' ) );
}
}
class Manager {
private static $instance = null;
public static function get_instance() {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->init();
}
}
动作:
\do_action( 'activitypub_before_send_activity', $activity );
\do_action( 'activitypub_after_send_activity', $activity, $response );
\do_action( 'activitypub_inbox_received', $activity );
过滤器:
$activity = \apply_filters( 'activitypub_activity_object', $activity, $post );
$content = \apply_filters( 'activitypub_the_content', $content, $post );
$actor = \apply_filters( 'activitypub_actor_data', $actor, $user_id );
新代码中的版本字符串始终使用 'unreleased'。发布脚本会在发布过程中自动将这些替换为实际的版本号。
PHPDoc 标签:
/**
* 新函数描述。
*
* @since unreleased
*/
function new_feature() {}
/**
* 旧函数。
*
* @deprecated unreleased 请改用 new_feature()。
*/
function old_feature() {}
弃用函数:
\_deprecated_function( __METHOD__, 'unreleased', 'New_Class::new_method' );
\_deprecated_argument( __METHOD__, 'unreleased', \esc_html__( '消息', 'activitypub' ) );
\_doing_it_wrong( __METHOD__, \esc_html__( '消息', 'activitypub' ), 'unreleased' );
切勿硬编码版本号,如 '5.1.0' — 始终使用 'unreleased'。
每周安装次数
49
代码仓库
GitHub 星标数
564
首次出现
2026年1月23日
安全审计
安装于
gemini-cli42
claude-code41
opencode40
codex40
antigravity38
github-copilot38
Plugin-specific conventions and architectural patterns for the ActivityPub plugin.
class-{name}.php # Regular classes.
trait-{name}.php # Traits.
interface-{name}.php # Interfaces.
namespace Activitypub;
namespace Activitypub\Transformer;
namespace Activitypub\Collection;
namespace Activitypub\Handler;
namespace Activitypub\Activity;
namespace Activitypub\Rest;
Always use 'activitypub' for translations:
\__( 'Text', 'activitypub' );
\_e( 'Text', 'activitypub' );
When in a namespace, always escape WordPress functions with backslash: \get_option(), \add_action(), etc.
See docs/php-coding-standards.md for complete WordPress coding standards.
See docs/php-class-structure.md for detailed directory organization.
includes/
├── class-*.php # Core classes.
├── activity/ # Activity type classes.
├── collection/ # Collection classes.
├── handler/ # Activity handlers.
├── rest/ # REST API endpoints.
├── transformer/ # Content transformers.
└── wp-admin/ # Admin functionality.
integration/ # Third-party integrations (root level).
Convert WordPress content into ActivityPub objects.
When to use: Converting posts, comments, users, or custom content types into ActivityPub format.
Base class: includes/transformer/class-base.php
Pattern:
namespace Activitypub\Transformer;
class Custom extends Base {
/**
* Transform object to ActivityPub format.
*
* @return array The ActivityPub representation.
*/
public function transform() {
$object = parent::transform();
// Custom transformation logic.
return $object;
}
}
Examples:
includes/transformer/class-post.php - Post transformation.includes/transformer/class-comment.php - Comment transformation.includes/transformer/class-event.php - Event-specific transformation.Process incoming ActivityPub activities from remote servers.
When to use: Processing incoming Follow, Like, Create, Delete, Update, etc. activities.
Pattern: Each handler processes one activity type from the inbox.
Examples:
includes/handler/class-follow.php - Process Follow activities.includes/handler/class-create.php - Process Create activities.includes/handler/class-delete.php - Process Delete activities.includes/handler/class-like.php - Process Like activities.Implement ActivityPub collections (Followers, Following, etc.).
When to use: Exposing lists of actors, activities, or objects via ActivityPub.
Examples:
includes/collection/class-followers.php - Followers collection.includes/collection/class-following.php - Following collection.Expose ActivityPub endpoints.
Namespace: ACTIVITYPUB_REST_NAMESPACE
Examples:
includes/rest/class-actors-controller.php - Actor endpoint.includes/rest/class-inbox-controller.php - Inbox endpoint.includes/rest/class-outbox-controller.php - Outbox endpoint.includes/rest/class-followers-controller.php - Followers collection endpoint.// Get remote actor metadata.
$metadata = get_remote_metadata_by_actor( $actor_url );
// Convert ActivityPub object to URI string.
$uri = object_to_uri( $object );
// Enrich content with callbacks.
$content = enrich_content_data( $content, $pattern, $callback );
// Resolve WebFinger handle to actor URL.
$resource = Webfinger::resolve( $handle );
// Get user's ActivityPub actor URL.
$actor_url = get_author_posts_url( $user_id );
// Check if a post type is enabled for ActivityPub.
$enabled = \is_post_type_enabled( $post_type );
Core Classes:
includes/class-activitypub.php - Main plugin initialization.includes/class-dispatcher.php - Activity dispatching to followers.includes/class-scheduler.php - WP-Cron integration for async tasks.includes/class-signature.php - HTTP Signatures for federation.Activity Types:
includes/activity/class-activity.php - Base activity class.includes/activity/class-follow.php - Follow activity.includes/activity/class-undo.php - Undo activity.Integrations (seeIntegration Patterns):
integration/class-woocommerce.php - WooCommerce integration.integration/class-buddypress.php - BuddyPress integration.integration/class-jetpack.php - Jetpack integration.class Feature {
/**
* Initialize the class.
*/
public static function init() {
\add_action( 'init', array( self::class, 'register' ) );
\add_filter( 'activitypub_activity_object', array( self::class, 'filter' ) );
}
}
class Manager {
private static $instance = null;
public static function get_instance() {
if ( null === self::$instance ) {
self::$instance = new self();
}
return self::$instance;
}
private function __construct() {
$this->init();
}
}
Actions:
\do_action( 'activitypub_before_send_activity', $activity );
\do_action( 'activitypub_after_send_activity', $activity, $response );
\do_action( 'activitypub_inbox_received', $activity );
Filters:
$activity = \apply_filters( 'activitypub_activity_object', $activity, $post );
$content = \apply_filters( 'activitypub_the_content', $content, $post );
$actor = \apply_filters( 'activitypub_actor_data', $actor, $user_id );
Always use'unreleased' for version strings in new code. The release script automatically replaces these with the actual version number during the release process.
PHPDoc tags:
/**
* New function description.
*
* @since unreleased
*/
function new_feature() {}
/**
* Old function.
*
* @deprecated unreleased Use new_feature() instead.
*/
function old_feature() {}
Deprecation functions:
\_deprecated_function( __METHOD__, 'unreleased', 'New_Class::new_method' );
\_deprecated_argument( __METHOD__, 'unreleased', \esc_html__( 'Message', 'activitypub' ) );
\_doing_it_wrong( __METHOD__, \esc_html__( 'Message', 'activitypub' ), 'unreleased' );
Never hardcode version numbers like '5.1.0' — always use 'unreleased'.
Weekly Installs
49
Repository
GitHub Stars
564
First Seen
Jan 23, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
gemini-cli42
claude-code41
opencode40
codex40
antigravity38
github-copilot38
Next.js 15+ 最佳实践指南:文件约定、RSC边界、异步模式与性能优化
1,400 周安装
World Labs:AI 驱动 3D 环境生成器,文本/图像一键创建逼真游戏世界
209 周安装
Instagram Graph API 使用指南:读取与发布内容,获取媒体和话题标签数据
208 周安装
Nansen Trading 命令行工具:Solana 和 Base 链上代币交易与报价执行指南
209 周安装
uni-app原生App打包指南:Android/iOS离线打包、签名配置与原生插件集成
45 周安装
Nansen智能提醒CLI工具:区块链链上监控与聪明钱追踪
210 周安装
Encore前端集成:自动生成TypeScript客户端,连接React与后端API
208 周安装