ideasonpurpose / wp-data-model
构建WordPress站点数据模型的基包
Requires
- doctrine/inflector: 2.0.8
- ideasonpurpose/wp-admin-separators: 1.0.8
Requires (Dev)
- ideasonpurpose/wp-test-stubs: dev-main
- kint-php/kint: ^5
- phpunit/phpunit: ^10.2
- dev-master
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.0
- v0.5.3
- v0.5.2
- v0.5.1
- v0.5.0
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.7
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- v0.1.2
- dev-dependabot/npm_and_yarn/minimist-1.2.8
- dev-dependabot/npm_and_yarn/json5-2.2.3
- dev-dependabot/npm_and_yarn/ansi-regex-4.1.1
- dev-dependabot/npm_and_yarn/node-fetch-2.6.7
- dev-dependabot/npm_and_yarn/tmpl-1.0.5
- dev-dependabot/npm_and_yarn/path-parse-1.0.7
This package is auto-updated.
Last update: 2024-09-12 17:49:34 UTC
README
版本 0.7.6
在 Ideas On Purpose 上为WordPress站点构建数据模型插件的基包。
示例数据模型插件
要开始一个新的数据模型插件,复制 example 目录。在 lib 子目录中创建新的CPTs和Taxonomies,然后从 main.php 实例化它们。使用 taxonomyMap
将Taxonomies连接到Post Types,并使用对 WP\Rename
的静态调用重命名内置的Post Types和Taxonomies。
创建自定义Post Types和Taxonomies
新自定义Post_Types作为扩展 IdeasOnPurpose\WP\CPT
的PHP类创建,新的Taxonomies扩展 IdeasOnPurpose\WP\Taxonomy
。所有新类都应该包括一个 props
方法,该方法定义 $this->args
。
分类映射和post_type分配
在 main.php 文件中,使用一个数组映射将post_types连接到taxonomies,其中每个键是一个单独的分类,每个值是要附加到其上的post_types数组。一个例子如下
// main.php $this->taxonomyMap = [ "category" => ["post", "policy", "help"], "audience" => ["post", "help", "event"], "fellowship" => ["event"], ];
分隔符
调用 new WP\Admin\Separators(22, 26)
并传入一个要插入分隔符的索引列表。匹配的索引将在CPT之后插入分隔符,所以以下代码将在 Events 下方直接显示一个分隔符
new CPT\Article(23); new WP\Admin\Separators(23);
管理CSS
新的Post_Types和Taxonomies可以通过定义一个 $css
属性向WordPress管理区域添加特定的CSS规则。
生成标签
可以使用 WP\DataModel::postTypeLabels()
和 WP\DataModel::taxonomyLabels()
从一组默认标签生成。这些通常用于在定义新的Post_Type或Taxonomy时填充 $args
属性的 labels
值。
参数是
$labelBase
字符串 标签的基本名称。这将根据WordPress默认值进行屈折和大小写校正。$inflect
[布尔值],默认true
一个布尔开关,用于启用$labelBase
的单数/复数屈折。$overrides
[数组],默认:[]
一个标签数组,将覆盖生成的默认 post_type 和 taxonomy 标签。
WordPress兼容性
WordPress报告一个 tested
值,描述插件开发和测试的最新版本。此值在运行package.json version 脚本之前自动生成。测试值从 WordPress Stable-Check API 收集并存储在 assets/tested.json 中。
重命名内置Post Types和Taxonomies
可以轻松地重命名内置的post_types和taxonomies。DataModel对象向WP命名空间添加了一个静态函数,可以像这样调用
WP\Rename::post("topic"); // rename Posts to Topics WP\Rename::category("colors"); // Rename Categories to Colors WP\Rename::tag("flavors", ["popular_items" => "Most delicious flavors"]); // Rename Tags to Flavors with an override label
DataModel将规范化单数和复数术语以及大小写,以符合WordPress最佳实践。对于非标准用途,提供覆盖标签。
tag
是 post_tag
的别名,两者都可以使用。
重命名仅影响内置类型和Taxonomies的标签,内部查询变量保持不变。
为什么是静态调用?
通过静态调用进行重命名是一个有意的选择。与创建新的CPT或Taxonomy不同,重命名不会创建任何新内容,所以使用 new
调用没有意义,尽管它符合现有语法。
调用new CPT
或new Taxonomy
是有意义的,因为这些命令创建了新的事物。对于重命名,命令作用于已存在的事物,所以调用语法将与执行的动作不一致。
重命名的语法通常可以在一行中实现,而创建新的CPT或Taxonomy通常需要定义额外的动作和过滤器。
Composer更新
Docker Compose Composer服务会在~/.composer/auth.json
中存在本地认证凭据时挂载并使用它们。如果这些凭据不存在且Composer遇到API速率限制,粘贴一个令牌将在挂载处创建一个新的auth.json文件,该文件将在主机系统上持久化。
导航菜单可见性
该插件将自动将所有自定义Taxonomy和CPT设置为默认在WordPress导航菜单管理中可见,适用于新用户账户。以前,用户必须记得打开屏幕选项并启用数据模型中的每个组件。
如果您想重置所有现有用户账户的导航菜单可见性,请运行以下命令以从用户_meta表中清除以前的条目。
DELETE FROM `wp_usermeta` WHERE `meta_key` = "metaboxhidden_nav-menus";
自动插件更新和AWS
每当推送新版本时,GitHub Action都会运行,编译和打包项目,然后将带有版本号的资产推送到我们的AWS S3存储桶之一。一个lambda微服务处理来自插件的查询,并启用WordPress插件的新版本的原生更新。
AWS Lambda
aws目录包含处理来自WordPress管理员插件页面的每个已安装插件的更新请求的lambda函数。
Lambda函数更新必须通过调用npm run lambda:deploy
手动触发。
变更日志、描述和横幅
资产应存储在项目中,并上传到与插件基本名称匹配的目录
README.md和CHANGELOG.md文件将用于填充WordPress插件管理界面的详细信息。变更日志是自动生成的。
备注
- wp-update-handler lambda函数位于AWS区域
us-east-2
。 - AWS lambda函数在node v14上运行,在
npm install
之前运行nvm use 14
以确保包兼容性。 - AWS凭据应从
IAM > Users > Security Credentials
为用户iop-cams
创建。复制.env.sample
并更新该文件中的值 - AWS API-Gateway现在使用
$LATEST
而不是已发布版本来引用lambda,从而使部署更新更简单。在API Gateway资源的POST - Integration Request选项中可以找到Lambda Function
设置 - 使用此链接切换到正确的组织帐户角色:AWS 登录
GitHub Actions
作为示例插件的一部分的publish-to-aws GitHub Action将构建插件并将工件推送到我们的S3更新存储桶。每个项目都需要为访问AWS定义两个GitHub Secrets,这些名称在env
部分的顶部文件example/.github/workflows/publish-to-aws.yml
中可以找到
env: S3_URI: s3://ideasonpurpose-wp-updates AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
测试插件更新
可以通过发送类似以下内容的原始JSON主体的POST请求来测试我们的WordPress更新AWS端点
{ "version": "0.0.1", "slug": "example-data-model", "plugin": "example-data-model/main.php" }
默认Post_Type和Taxonomy标签
默认标签可以从WordPress中提取,通过转储全局$wp_post_types[$type]->labels
和$wp_taxonomies[$taxonomy]->labels
对象。WordPress将标签定义为数组,但以对象的形式存储它们。帖子和平面重叠得很好,标签和类别包括用于分层显示的特殊情况。
// Default Page labels [ "name" => "Pages", "singular_name" => "Page", "add_new" => "Add New", "add_new_item" => "Add New Page", "edit_item" => "Edit Page", "new_item" => "New Page", "view_item" => "View Page", "view_items" => "View Pages", "search_items" => "Search Pages", "not_found" => "No pages found.", "not_found_in_trash" => "No pages found in Trash.", "parent_item_colon" => "Parent Page:", "all_items" => "All Pages", "archives" => "Page Archives", "attributes" => "Page Attributes", "insert_into_item" => "Insert into page", "uploaded_to_this_item" => "Uploaded to this page", "featured_image" => "Featured image", "set_featured_image" => "Set featured image", "remove_featured_image" => "Remove featured image", "use_featured_image" => "Use as featured image", "filter_items_list" => "Filter pages list", "filter_by_date" => "Filter by date", "items_list_navigation" => "Pages list navigation", "items_list" => "Pages list", "item_published" => "Page published.", "item_published_privately" => "Page published privately.", "item_reverted_to_draft" => "Page reverted to draft.", "item_scheduled" => "Page scheduled.", "item_updated" => "Page updated.", "menu_name" => "Pages", "name_admin_bar" => "Page", ];
// Default Category labels [ "name" => "Categories", "singular_name" => "Category", "search_items" => "Search Categories", "popular_items" => null, "all_items" => "All Categories", "parent_item" => "Parent Category", "parent_item_colon" => "Parent Category:", "edit_item" => "Edit Category", "view_item" => "View Category", "update_item" => "Update Category", "add_new_item" => "Add New Category", "new_item_name" => "New Category Name", "separate_items_with_commas" => null, "add_or_remove_items" => null, "choose_from_most_used" => null, "not_found" => "No categories found.", "no_terms" => "No categories", "filter_by_item" => "Filter by category", "items_list_navigation" => "Categories list navigation", "items_list" => "Categories list", "most_used" => "Most Used", "back_to_items" => "← Go to Categories", "menu_name" => "Categories", "name_admin_bar" => "category", ];
// Default Tag (post_tag) labels [ "name" => "Tags", "singular_name" => "Tag", "search_items" => "Search Tags", "popular_items" => "Popular Tags", "all_items" => "All Tags", "parent_item" => null, "parent_item_colon" => null, "edit_item" => "Edit Tag", "view_item" => "View Tag", "update_item" => "Update Tag", "add_new_item" => "Add New Tag", "new_item_name" => "New Tag Name", "separate_items_with_commas" => "Separate tags with commas", "add_or_remove_items" => "Add or remove tags", "choose_from_most_used" => "Choose from the most used tags", "not_found" => "No tags found.", "no_terms" => "No tags", "filter_by_item" => null, "items_list_navigation" => "Tags list navigation", "items_list" => "Tags list", "most_used" => "Most Used", "back_to_items" => "← Go to Tags", "menu_name" => "Tags", "name_admin_bar" => "post_tag", ];
由IOP提供
该项目正在积极开发中,并在 Ideas On Purpose 的生产环境中使用。