humanmade / publication-checklist
在发布帖子之前运行检查并强制执行条件。
Requires
- php: >=7.0
This package is auto-updated.
Last update: 2024-09-18 20:10:06 UTC
README
在发布帖子之前运行检查并强制执行条件。为WordPress块编辑器构建和设计。
出版清单提供了一个框架,用于构建预发布检查,具有适应您工作流程的灵活性。
演示插件
如果您更喜欢下载一个空白插件来添加检查并直接开始玩现有代码,您可以在此处下载、安装和激活可用的演示插件
https://github.com/humanmade/demo-publication-checklist
创建检查
检查的核心是一个函数,该函数接收帖子的数据和元数据,并返回一个Status
对象。此状态对象指示是否阻止发布。
例如,强制设置“foo”元键的值
use function Altis\Workflow\PublicationChecklist\register_prepublish_check; use Altis\Workflow\PublicationChecklist\Status; add_action( 'altis.publication-checklist.register_prepublish_checks', function () { register_prepublish_check( 'foo', [ 'run_check' => function ( array $post, array $meta, array $terms ) : Status { if ( isset( $meta['foo'] ) ) { return new Status( Status::COMPLETE, 'Foo completed' ); } return new Status( Status::INCOMPLETE, 'Missing foo data' ); }, ] ); } );
通过使用具有唯一ID的Altis\Workflow\PublicationChecklist\register_prepublish_check
函数注册检查。应在altis.publication-checklist.register_prepublish_checks
动作上调用此函数。
注意: altis.publication-checklist.register_prepublish_checks
动作在plugins_loaded
钩子上运行,因此您应该确保您的add_action()
调用在您的自定义插件文件包含或您的主题functions.php
时运行。不要将其包装在init
或after_setup_theme
等钩子中。
您的检查函数接收帖子数据作为数组,以及帖子的元数据作为数组。您的函数应仅使用此数据来运行检查,因为这些数据可能代表在保存到数据库之前的数据。具体来说,您的函数的签名应该是
function ( array $post, array $meta, array $terms ) : Status;
您的函数必须返回一个Altis\Workflow\PublicationChecklist\Status
对象。此对象标记为完整(允许发布)、不完整(阻止发布)或信息性(显示为失败,但允许发布)。此状态对象采用状态类型(应该是Status::COMPLETE
、Status::INCOMPLETE
或Status::INFO
)和可读性消息。
$post
是与get_post( $id, ARRAY_A )
返回的形状匹配的帖子数据数组。$meta
是元数据数组,格式为string $key => mixed|mixed[] $value
。$terms
是术语数组,格式为string $taxonomy => int[] $terms
。
您还可以通过状态对象传递数据,这些数据可以在前端用于辅助渲染。
默认情况下,检查将仅针对post
帖子类型运行。您可以将相关类型作为type
选项传递
add_action( 'altis.publication-checklist.register_prepublish_checks', function () { // Pass a single type: register_prepublish_check( 'foo', [ 'type' => 'page', // ... ] ); // Or multiple: register_prepublish_check( 'foo', [ 'type' => [ 'post', 'page', ], // ... ] );
显示检查状态
默认情况下,出版清单将渲染所有检查的简单清单。
如果需要,您可以覆盖特定项以渲染更丰富的UI。例如,您可能希望深度集成到块编辑器中,或者允许用户内联纠正失败的检查。此UI直接插入到React元素树中,并替换默认输出。
出版清单通过使用withFilters
暴露了altis-publishing-workflow.item.{check_id}
过滤器,以允许覆盖列表项组件。
例如,要将默认状态消息包裹成链接,指向 foo
检查的文档页面
import { Fragment } from '@wordpress/element'; addFilter( 'altis-publishing-workflow.item.image-texts', 'foo/link-message', () => { return props => { return ( <Fragment> { props.renderStatusIcon() } <a href="http://example.com/">{ props.message }</a> </Fragment> ); }; } );
您的组件接收以下属性
const propTypes = { // Check ID. name: PropTypes.string.isRequired, // Human-readable message returned from the backend. message: PropTypes.string.isRequired, // Status string. status: PropTypes.oneOf( [ 'complete', 'incomplete', 'info' ] ).isRequired, // Function to render the status of the current check. // () => ReactElement renderStatusIcon: PropTypes.func.isRequired, // Additional data from the backend. data: PropTypes.any, };
要启用高级功能,您可能希望将此组件包裹在选择器中,这些选择器提供有关帖子的数据。请注意,后端是所有检查数据的规范来源,因此更改检查状态需要保存到后端才能生效。
强制执行检查
要强制执行这些检查并阻止发布,过滤 altis.publication-checklist.block_on_failing
的值,并在您的回调中返回 true。这将更改 UI,禁用发布按钮,显示用户界面的消息,指示必须完成检查,并阻止发布帖子的请求。
修改列表视图
发布清单将在帖子列表屏幕中添加一个任务列,显示每篇帖子的状态。只有注册了状态时,此列才会显示。
隐藏任务列
要隐藏此列,过滤 altis.publication-checklist.show_tasks_column
的值,并在您的回调中返回 false。这将隐藏任务列。
更改任务列的位置
默认情况下,任务列在支持的帖子类型中出现在标题列之后。
要更改任务列出现后的列,使用 altis.publication-checklist.show_tasks_after_column
过滤器并返回所需的列别名,例如 title
、author
或 tags
等。
许可证
发布清单根据 GPLv2 或更高版本授权。版权所有:2019 年 Human Made 和贡献者。