巴晓天 / wp_p2p
Requires
- php: >=7.0
- baxtian/php-singleton: ^0.6.6
Requires (Dev)
- timber/timber: ^2.0
This package is auto-updated.
Last update: 2024-09-11 13:11:27 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个参数的数组。
- name:关系的名称
- from:要关联的结构之一(帖子、页面或自定义类型)
- to:要关联的其他结构
- sortable:一个布尔值,用于确定列表是否允许排序。此参数不是必需的,默认值为 true。
变量 from 和 to 可以是结构的 别名,也可以是一个包含这些参数的数组
- type:结构的 别名(帖子、页面、自定义_post)
- title:用于元框的文本。此参数不是必需的,系统将默认使用结构的单数或复数名称。
- cardinality:如果这是单个或多个项的选择。允许的值是 ONE 或 MANY。此参数不是必需的,默认值是 MANY。
- ui:如果此库将在结构的设置侧边栏中渲染列表,请使用 auto;如果需要为自身创建自定义侧边栏,请使用 sidebar;如果需要创建自定义元框,请使用 手动。此参数不是必需的,默认值是 auto。
- icon:设置将伴随管理界面的 dashicon。此参数不是必需的,默认图标是 admin-links。
- display_in_admin_column:指示此帖子类型的项是否将在管理页面的列中显示。数字可以是正数或负数,以指示相反帖子类型表格列的位置。默认值是 false。
- 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
- 第一个稳定版本