humanmade/publication-checklist

在发布帖子之前运行检查并强制执行条件。

安装次数: 119,429

依赖项: 2

建议者: 0

安全: 0

星标: 117

关注者: 22

分支: 11

开放问题: 6

语言:JavaScript

类型:wordpress-plugin

0.3.3 2024-07-18 19:48 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时运行。不要将其包装在initafter_setup_theme等钩子中。

您的检查函数接收帖子数据作为数组,以及帖子的元数据作为数组。您的函数应仅使用此数据来运行检查,因为这些数据可能代表在保存到数据库之前的数据。具体来说,您的函数的签名应该是

function ( array $post, array $meta, array $terms ) : Status;

您的函数必须返回一个Altis\Workflow\PublicationChecklist\Status对象。此对象标记为完整(允许发布)、不完整(阻止发布)或信息性(显示为失败,但允许发布)。此状态对象采用状态类型(应该是Status::COMPLETEStatus::INCOMPLETEStatus::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 过滤器并返回所需的列别名,例如 titleauthortags 等。

许可证

发布清单根据 GPLv2 或更高版本授权。版权所有:2019 年 Human Made 和贡献者。