bernskioldmedia/wp-plugin-scaffold

这是一个WordPress插件骨架,我们在Bernskiold Media开发特定客户插件时使用。

资助包维护!
:供应商名称

安装: 51

依赖项: 0

建议者: 0

安全: 0

星标: 6

关注者: 4

分支: 2

开放问题: 10

类型:wordpress-plugin


README

这是一个简单的插件基础,我们在Bernskiold Media为我们的客户创建自定义插件时使用。

为了快速开始,这个基础被保持得非常简单。我们包含的唯一代码片段是为分类和文章类型,它们几乎总是被每个新插件使用。

随着我们的开发需求的变化,我们将对这个插件基础进行更多(或更少)的修改。

通常,请参阅我们的WP插件基础文档,以了解如何使用该骨架。

入门

要开始开发插件,最简单的方法是使用bmwp CLI。

安装后,将您置于插件文件夹中并运行:bmwp create:plugin plugin-name,将插件名称替换为您的所需文件夹名称。然后,您将需要回答一系列设置问题。

运行后,从README中删除此部分,并更新它以更具体地说明插件项目。

开发入门

如何添加块编辑器支持

我们经常发现自己需要为提供一些额外块编辑器块的插件添加块支持。

为了使这个过程简单,我们已经抽象了一个composer库,(块插件支持)[https://github.com/bernskioldmedia/Block-Plugin-Support],其中包含一个具有辅助函数的特质。

请参阅其文档以了解如何添加。

在哪里放置块?

块代码应放置在blocks/目录中,每个块都有一个子目录。

块文件夹结构

作为一个一般指南,每个块都应该有以下结构。我们更喜欢将它们分成更多文件,以便于清洁和简洁。

block.json
index.js
edit.js
icon.js
inspector.js
save.js

服务器端渲染的块基础

对于服务器端渲染的块,我们有一个基础块类,它提供了一些有用的方法。这是由块插件支持库提供的。

这是一个裸块类的样子,它从抽象块类继承方法

use BernskioldMedia\WP\Block_Plugin_Support\Block;

class My_Thing_Block extends Block {

	/**
	 * Render the content
	 *
	 * @param  array  $attributes
	 *
	 * @return false|string
	 */
	 public static function render( $attributes ): string {

	 	ob_start();
	 	?>
	 		<!-- My HTML Output Here -->
	 	<?php
	 	return ob_get_clean();

	 }

}

此文件应放置在: src/Blocks/My_Thing_Block.php

在REST API中的元数据

使我们的ACF和其他元数据在REST API中可用是有帮助的。为此,我们有一系列辅助方法,它们钩入REST API以处理返回和更新元数据。

您需要做两件事

  1. 通过引用数据类将数据存储连接到数据类。protected static $data_class = Namespace\MyObject::class
  2. 设置一个数组,使其在public static $metadata = []数组中可用。这些应该是数据类中使用的getters/setters的相同键。例如,如果您在数据类中有一个get_name()方法,请将name添加到元数据数组中。

修改默认的WP_Query以针对存档/列表

通过在数据存储类中添加方法public static query_modifications( \WP_Query $query ): \WP_Query,它将自动钩入pre_get_posts,允许您轻松修改数据存储的主查询。

这可以用于例如为数据存储数据设置特定的排序顺序。

在此处使用以下函数作为快速入门示例

/**
 * Modify the query.
 *
 * @param  \WP_Query  $query
 *
 * @return \WP_Query
 */
public static function query_modifications( \WP_Query $query ) {

	if ( is_admin() && ! $query->is_main_query() ) {
		return $query;
	}

	if ( $query->get( 'post_type' ) !== static::get_key() ) {
		return $query;
	}

	// $query->set( 'prop', 'value' );

	return $query;

}

设置能力

默认情况下,数据存储将具有常识性的默认权限结构。抽象的Custom_Post_TypeTaxonomy类包含默认设置。

您可以通过在::$permissions属性上设置类似结构的role => permissions数组来覆盖它。权限属性中的任何内容都将覆盖由::$default_permissions设置的默认权限。

您可以通过调用self::get_capabilities()来加载注册函数的能力数组。

编码风格

我们专门尝试使用所有语言的WordPress编码实践,包括PHP、HTML、CSS和JavaScript。

这个基础插件部分基于OOP,以便它能在自己的命名空间中存在,并且使代码的扩展、更新和维护变得简单易行。

开源

我们将其开源的原因是因为这是正确的事情。也许有人会从中找到用途,或者部分用途。这不会是一个积极开发的“主插件基础”,旨在成为WordPress社区中最伟大的事物。它只是我们内部使用的东西,公开发布以供全世界看到和使用。