巴晓天/wp_p2p

Wordpress中设置帖子类型之间关系的库。

0.5.22 2024-03-27 23:33 UTC

README

创建帖子间的关系。

注意:这是一个Merak组件,需要Merak环境。

用法

src/Relationships.php 文件中创建声明关系的文件

<?php

namespace App;

use Baxtian\WP_P2P as WP_P2P;

class Relationships extends WP_P2P
{
	use \Baxtian\SingletonTrait;

	/**
	 * Inicializa el componente
	 */
	protected function __construct()
	{
		parent::__construct(INV_F);
	}

	/**
	 * Declare relationships.
	 */
	public function connections(): void
	{

		$this->register_relationship([
			'name' 		=> 'post_to_page',
			'from' 		=> 'post',
			'to' 		=> 'page'
		]);

		$this->register_relationship([
			'name'	=> 'post_to_custom_post_type',
			'from'	=> [
				'type' 						=> 'post', 
				'title' 					=> __('Post', INV_D), 
				'cardinality' 				=> 'ONE', 
				'ui' 						=> 'auto',
				'icon'						=> 'admin-links' 
				'display_in_admin_column' 	=> 2,
				'allow_create'				=> true
			],
			'to'	=> [
				'type' 			=> 'custom_post_type', 
				'title' 		=> __('Custom post type', INV_D), 
				'cardinality' 	=> 'MANY', 
				'ui' 			=> 'manual'
			],
			'sortable' => false,
		]);
	}
}

任何新注册都需要一个包含3或4个参数的数组。

  1. name:关系的名称
  2. from:要关联的结构之一(帖子、页面或自定义类型)
  3. to:要关联的其他结构
  4. sortable:一个布尔值,用于确定列表是否允许排序。此参数不是必需的,默认值为 true

变量 fromto 可以是结构的 别名,也可以是一个包含这些参数的数组

  1. type:结构的 别名(帖子、页面、自定义_post)
  2. title:用于元框的文本。此参数不是必需的,系统将默认使用结构的单数或复数名称。
  3. cardinality:如果这是单个或多个项的选择。允许的值是 ONEMANY。此参数不是必需的,默认值是 MANY
  4. ui:如果此库将在结构的设置侧边栏中渲染列表,请使用 auto;如果需要为自身创建自定义侧边栏,请使用 sidebar;如果需要创建自定义元框,请使用 手动。此参数不是必需的,默认值是 auto
  5. icon:设置将伴随管理界面的 dashicon。此参数不是必需的,默认图标是 admin-links
  6. display_in_admin_column:指示此帖子类型的项是否将在管理页面的列中显示。数字可以是正数或负数,以指示相反帖子类型表格列的位置。默认值是 false
  7. allow_create:如果UI中搜索无响应,允许创建条目。选择器将在文本附近显示一个图钉并创建条目。

查询

WP_P2P通过添加使用 p2p 参数查询与帖子相关项的能力。

这需要一个数组,描述关系类型和关系的一个端点。

在此示例中,查询返回与帖子5相关并由 post_to_page 关系关联的任何页面。如你所见,WP_P2P允许使用 __Timber::get_posts()__。

$args = [
	'post_type' => 'page',
	'p2p'       => [
		'relation' => 'AND',
		[
			'type' => 'post_to_page',
			'to'   => 5,
		],
	]
];

$posts = (array) Timber::get_posts($args);

在此示例中,查询返回通过 post_to_page 关系与帖子5或6相关的任何结构。在这种情况下,示例使用Wordpress的 __get_posts__ 函数。

$args = [
	'post_type' => 'any',
	'p2p'       => [
		'relation' => 'OR',
		[
			'type' => 'post_to_page',
			'to'   => 5,
		],
		[
			'type' => 'post_to_page',
			'to'   => 6,
		],
	]
];

$posts = get_posts($args);

与上一个示例相同的结果,但在此情况下,示例使用Wordpress的 __WP_Query__ 类。

$args = [
	'post_type' => 'any',
	'p2p'       => [
		'relation' => 'OR',
		[
			'type' => 'post_to_page',
			'to'   => 5,
		],
		[
			'type' => 'post_to_page',
			'to'   => 6,
		],
	]
];

$query = new WP_Query($args);

在此示例中,查询返回与帖子编号5通过 post_to_page 关系相关的任何结构。在这种情况下,代码直接使用p2p中的函数。

use Baxtian\WP_P2P;

$list = WP_P2P::relationships('post_to_page', 5);

警告:请注意,这返回所有相关帖子,包括草稿、未来的和私有的帖子。为了使用Wordpress的过滤器功能,建议使用WP_Query、get_posts或Timber::get_posts()。

在twig / timber中渲染

要获取相关元素列表,可以使用

{% set list = post|apply_filters('p2p/relationships', 'relationship_name') %}

这通过一个数组创建一个与通过关系名称 relationship_name 关联的 WP_Posts列表。查看声明以获取关系的名称。

注意: post 必须是类型 __WP_Post__ 或整数。

渲染自定义元框

如果 ui 选项是 手动,则必须创建您自己的自定义 元框。这有其自身的好处,例如,可以创建一个用于所有关系的单个 元框,而不是为每个关系创建多个 元框

在这种情况下,您可以使用插件的 UI 便利地创建 元框

{% do action('p2p/metabox', post_id, 'relationship_name') %}

其中 post_id 是一个整数,而 relationship_name 是在声明过程中给出的关系的名称。

维护者

Juan Sebastián Echeverry baxtian.echeverry@gmail.com

变更日志

0.5.22

  • 基于相关项目获取元数据,而不是存储的值。

0.5.21

  • 添加侧边栏和图标选项。

0.5.19

  • 添加侧边栏的防抖。

0.5.17

  • 在使用 UI 时,如果没有答案,允许在搜索选择器中直接创建条目。

0.5.13

  • 允许在管理员界面中显示相关元素列表。

0.5.10

  • 解决错误。

0.5.9

  • 改进文档。

0.5.8

  • 改进排序系统中的光标样式。

0.5.7

  • 允许在管理中关联草稿、私有和未来的帖子。

0.5.6

  • 自定义元框的样式调整。

0.5.5

  • 为开发者添加文档。

0.5.4

  • [错误] 恢复具有唯一成员的列表的样式。

0.5.2

  • 添加在保存/更新之前过滤 mysql 子句和 postmeta 值的钩子。
  • p2p\query_clauses($clauses, $relationship) : 如果它是 wp_p2p 查询,则执行
  • p2p\before_update_postmeta($value, $key, $post_id) : 在保存 postmeta 之前执行

0.5.0

  • 使用 react-easy-sort

0.4.12

  • 清洁代码

0.4.11

  • 包括仅父母的关联声明选项。

0.4.10

  • 错误:使用 tax_query 时查询不起作用。

0.4.9

  • 查询关系的函数

0.4.8

  • 包括具有 connected_type 和 connected_items 的查询。

0.4.7

  • 错误修复

0.4.6

  • 包括 UI 选项:手动或自动(默认)

0.4.5

  • 在基数 "one" 的情况下,允许反向关系。

0.4.4

  • 允许关联同一类型的帖子,但基数必须相同。
  • 如果关联同一类型的帖子,则仅显示第一个 UI。

0.4.3

  • 自定义数据库表。
  • 从 p2p(旧插件)表复制数据。

0.4.2

  • 从资产文件添加依赖项。

0.4.1

  • 从 p2p(插件)环境升级。

0.4

  • 添加 UI

0.3

  • 如果在使用此类在多个提供者中,允许 Composer 设置默认使用的文件。

0.2

  • 允许使用 PHP8.0

0.1

  • 第一个稳定版本