10up / wp-content-connect
WordPress的帖子和用户库之间的直接关系
Requires
- composer/installers: ^1.2
Requires (Dev)
- 10up/wp_mock: 0.2.0
- phpunit/phpunit: ^5.7
- dev-master
- 1.5.0
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.0
- dev-dependabot/npm_and_yarn/got-and-vue-resource-11.8.6
- dev-dependabot/npm_and_yarn/scss-tokenizer-and-node-sass-0.4.3
- dev-dependabot/npm_and_yarn/minimatch-3.0.8
- dev-dependabot/npm_and_yarn/minimist-and-minimist-and-mkdirp-1.2.8
- dev-fix/delete-item
- dev-dependabot/npm_and_yarn/decode-uri-component-0.2.2
- dev-dependabot/npm_and_yarn/shell-quote-1.7.3
- dev-multi-to
This package is auto-updated.
Last update: 2024-09-02 19:49:38 UTC
README
WordPress库,允许帖子之间和帖子与用户之间的直接关系。
安装和用法
WP Content Connect可以作为插件或独立库使用。最简单的方法是将其作为插件安装并激活。
Composer安装
作为库
首先,使用命令行要求此存储库
$ composer require 10up/wp-content-connect
或者在composer.json
中直接使用
"require": {
"10up/wp-content-connect": "^1.5.0"
}
这将安装WP Content Connect到您的vendor
文件夹,并允许您通过调用\TenUp\ContentConnect\Plugin::instance();
从您的代码中使用它作为库。
作为插件
或者,如果您希望使用Composer将其作为插件安装,您可以在composer.json
中使用以下示例重新声明此包
{
"name": "your project name",
"repositories": [
{
"type": "package",
"package": {
"name": "10up/wp-content-connect",
"type": "wordpress-plugin",
"version": "1.5.0",
"source": {
"url": "https://github.com/10up/wp-content-connect.git",
"type": "git",
"reference": "1.5.0"
}
}
}
],
"require": {
"10up/wp-content-connect": "^1.5",
"composer/installers": "^1.7"
},
"extra": {
"installer-paths": {
"plugins/wp-content-connect/": [
"10up/wp-content-connect"
]
}
}
}
定义关系
关系可以在通过钩子连接到tenup-content-connect-init
操作后定义。此操作在WordPress init
操作时触发,优先级为100,因此必须在之前注册任何帖子类型。目前支持的关系是帖子到帖子和帖子到用户。此外,在注册关系时,您必须指定一个name
。名称允许同一对象类型之间存在多个不同的关系。例如,您可以为帖子类型post
创建一个类型为researchers
的帖子到用户关系,以表示“研究者”关系中的任何用户都是帖子的研究者,并可以为帖子类型post
创建另一个名为backer
的帖子到用户关系,以表示“支持者”关系中的任何用户都为帖子提供财务支持。
define_post_to_post( $from, $to, $name, $args = array() )
此方法定义了两个帖子类型$from
和$to
之间的帖子到帖子关系。
参数
$from
(String) 关系中的第一个帖子类型
$to
(String|Array) 关系中的第二个帖子类型(s)
$name
(String) 此关系的唯一名称,用于区分同一帖子类型之间的多个关系
$args
(Array) 关系的选项数组
参数
参数期望为关系的from
和to
侧提供选项,作为顶级键。每个方向的选项如下
enable_ui
(Bool) - 是否为当前关系的这一侧启用默认UIsortable
(Bool) - 是否可对当前关系的这一侧进行排序labels
(Array) - UI中用于关系的标签。目前仅期望一个值,name
(String)
返回值
此方法返回一个针对此关系的\TenUp\ContentConnect\Relationships\PostToPost
实例。如果需要,可以使用该对象手动管理相关项目。请参阅下面的<@TODO插入链接>部分。
示例
function my_define_relationships( $registry ) { $args = array( 'from' => array( 'enable_ui' => true, 'sortable' => true, 'labels' => array( 'name' => 'Related Tires', ), ), 'to' => array( 'enable_ui' => false, 'sortable' => false, 'labels' => array( 'name' => 'Related Cars', ), ), ); $relationship = $registry->define_post_to_post( 'car', 'tire', 'car-tires', $args ); } add_action( 'tenup-content-connect-init', 'my_define_relationships' );
define_post_to_user( $post_type, $name $args = array() )
此方法定义了提供的帖子类型和用户之间的帖子到用户关系。
参数
$post_type
(String) 要与用户相关联的帖子类型
$name
(String) 此关系的唯一名称,用于区分用户和同一帖子类型之间的多个关系
$args
(Array) 关系的选项数组
参数
参数期望为关系的from
(帖子类型)侧提供选项,作为顶级键。选项如下
enable_ui
(Bool) - 是否为当前关系的这一侧启用默认UIsortable
(Bool) - 是否可对当前关系的这一侧进行排序labels
(Array) - UI中用于关系的标签。目前仅期望一个值,name
(String)
返回值
此方法返回一个针对此关系的特定实例 \TenUp\ContentConnect\Relationships\PostToUser
。如果需要,可以使用该对象手动管理相关项目。请参阅下面的 <@TODO 插入链接> 部分。
示例
function my_define_relationships( $registry ) { $args = array( 'from' => array( 'enable_ui' => true, 'sortable' => false, 'labels' => array( 'name' => 'Related Users', ), ), ) $relationship = $registry->define_post_to_user( 'post', 'related', $args ); } add_action( 'tenup-content-connect-init', 'my_define_relationships' );
目前不支持在这些关系的用户端渲染任何默认用户界面
可排序的关系
关系可以可选地支持可排序的相关项目。关系的两边的顺序可以独立存储。例如,如果您有汽车和轮胎,您可能有一辆汽车有5个相关轮胎,如果您想排序轮胎,您可以从汽车页面进行排序。然后您可以转到其中一个相关轮胎,并单独排序与之相关联的所有汽车。
由于您可以从关系中的两种帖子类型中管理此关系,如果您从汽车页面添加轮胎,并且您之前在轮胎上存储了关系数据,那么关系中的新汽车仍然会在查询结果中显示,在所有其他预排序数据之后(最后)。
查询集成
通过为 WP_Query
添加一个新的 relationship_query
参数来启用查询关系。 relationship_query
的格式与 tax_query
非常相似。
一个有效的查询关系段 必须 包含 name
和 related_to_post
或 related_to_user
。可以组合尽可能多的关系段以创建一组特定结果,并可以使用 AND
或 OR
关系进行组合。
顶层参数
relation
(字符串)可以是AND
(默认值)或OR
。指定如何组合关系中的所有段。
段参数
name
(字符串)您正在查询的关系的唯一名称。应与注册关系时使用的name
匹配。related_to_post
(整数)查找与该帖子 ID 相关的关系中的项目。不能与related_to_user
在同一段中使用。related_to_user
(整数)查找与该用户 ID 相关的关系中的项目。不能与related_to_post
在同一段中使用。
示例
$query = new WP_Query( array( 'post_type' => 'post', 'relationship_query' => array( 'relation' => 'AND', // AND is default array( 'related_to_post' => 25, 'name' => 'related', ), array( 'related_to_user' => 5, 'name' => 'researcher', ) ), ) );
目前,在 WP_Query 中查询多个帖子类型可能不会按预期工作。当使用关系查询时,请确保在 WP_Query 中只有一个 post_type
值。
排序
对于禁用排序的关系,所有默认 WP_Query orderby
选项都受支持。除了默认的 orderby
选项之外,如果为关系启用了排序,则还支持额外的排序参数 relationship
。当使用 relationship
作为排序值时,顺序始终为 ASC
,并且必须遵守以下 WP_Query
和 WP_User_Query
限制
- 不允许复合关系查询 - 查询中只能添加一个段
例如,这是可以接受的
'relationship_query' => array( array( 'related_to_post' => 25, 'name' => 'related', ), ), 'orderby' => 'relationship',
而这是不可行的(orderby 将被忽略)
'relationship_query' => array( array( 'related_to_post' => 25, 'name' => 'related', ), array( 'related_to_post' => 15, 'name' => 'related', ), ), 'orderby' => 'relationship',
手动管理关系
如果您选择不使用关系内置用户界面,则需要手动更新关系。不要 直接与数据库表交互。相反,使用以下 API 方法。底层实现可能需要不时更改,但这些方法应该继续工作,如果底层实现需要更改。
这些方法在定义关系时返回的关系对象上可用。请确保在您定义关系的特定关系对象上调用这些方法,因为这些方法特定于关系上下文(它们知道关系的 name
以及关系中的帖子类型)。
如果您还没有关系对象,您可以使用 Registry->get_post_to_post_relationship()
或 Registry->get_post_to_user_relationship()
从注册表中获取一个。
Registry->get_post_to_post_relationship( $cpt1, $cpt2, $name )
返回具有提供名称的两个帖子类型之间的关系对象。
参数
$cpt1
(String) 关系中的第一个帖子类型
$cpt2
(String) 关系中的第二个帖子类型
$name
(String) 关系的名称,作为传递给 define_post_to_post_relationship 的参数
示例
$registry = \TenUp\ContentConnect\Plugin::instance()->get_registry(); // Gets the car to tire relationship defined in the example above $relationship = $registry->get_post_to_post_relationship( 'car', 'tire', 'car-tires' );
Registry->get_post_to_user_relationship( $post_type, $name )
返回具有提供名称的帖子类型和用户之间的关系对象。
参数
$post_type
(String) 帖子到用户关系中的帖子类型
$name
(String) 关系的名称,作为传递给 define_post_to_user_relationship 的参数
示例
$registry = \TenUp\ContentConnect\Plugin::instance()->get_registry(); // Gets the post to user relationship defined in the example above $relationship = $registry->get_post_to_user_relationship( 'post', 'related' );
PostToPost->add_relationship( $pid1, $pid2 )
此方法在帖子之间添加一个关系,在帖子到帖子关系。在调用此方法时,传递的 ID 的顺序不重要。
参数
$pid1
(Int) 关系中第一个帖子的 ID
$pid2
(Int) 关系中第二个帖子的 ID
示例
// $relationship is the return value from ->define_post_to_post() $relationship->add_relationship( 1, 2 ); // Adds a relationship between post ID 1 and post ID 2
PostToPost->delete_relationship( $pid1, $pid2 )
此方法删除帖子之间在帖子到帖子关系中的关系。在调用此方法时,传递的 ID 的顺序不重要。
参数
$pid1
(Int) 关系中第一个帖子的 ID。不需要与添加关系时的顺序相同。
$pid2
(Int) 关系中第二个帖子的 ID。不需要与添加关系时的顺序相同。
示例
// $relationship is the return value from ->define_post_to_post() // Note that the example above added these in the reverse order, but the relationship is still deleted $relationship->delete_relationship( 2, 1 ); // Deletes the relationship between post ID 1 and post ID 2.
PostToPost->replace_relationships( $post_id, $related_ids )
替换帖子到帖子关系的现有关系。任何存在于数据库中但不在 $related_ids 中的关系将不再相关。
参数
$post_id
(Int) 我们要替换关系的帖子的 ID。
$related_ids
(Array) 与 $post_id 相关的帖子 ID 数组
示例
帖子 ID 5 与帖子 2、3、6、7、8 相关
// $relationship is the return value from ->define_post_to_post() $relationship->replace_relationships( 5, array( 2, 3, 6, 7, 8 ) );
PostToPost->save_sort_data( $object_id, $ordered_ids )
对于启用了排序的关系,此方法保存关系单方向中帖子的顺序。
参数
$object_id
(Int) 我们要排序的帖子 ID。如果我们为单辆车订购 5 个轮胎,这将是要订购的汽车 ID。
$ordered_ids
(Array) 应按顺序排序的帖子 ID 数组。如果我们为单辆车订购 5 个轮胎,这将是要订购的轮胎 ID。
示例
汽车 ID 5 有五个相关轮胎,应按 7、6、3、8、2 的顺序排序
// $relationship is the return value from ->define_post_to_post() $relationship->save_sort_data( 5, array( 7, 6, 3, 8, 2 ) );
PostToUser->add_relationship( $post_id, $user_id )
此方法在帖子到用户关系中添加一个帖子与一个用户之间的关系。
参数
$post_id
(Int) 关系中帖子的 ID
$user_id
(Int) 关系中用户的 ID
示例
// $relationship is the return value from ->define_post_to_user() $relationship->add_relationship( 1, 5 ); // Adds a relationship between post 1 and user 5
PostToUser->delete_relationship( $post_id, $user_id )
此方法删除帖子到用户关系中的一个帖子与一个用户之间的关系。
参数
$post_id
(Int) 关系中帖子的 ID
$user_id
(Int) 关系中用户的 ID
示例
// $relationship is the return value from ->define_post_to_user() $relationship->delete_relationship( 1, 5 ); // Deletes the relationship between post 1 and user 5
PostToUser->replace_post_to_user_relationships( $post_id, $user_ids )
用提供的用户 ID 集合替换与帖子相关的用户。任何与帖子相关的且不在 $user_ids 中的用户将不再相关。
参数
$post_id
(Int) 我们要替换关系的帖子的 ID。
$user_ids
(Array) 与 $post_id 相关的用户 ID 数组
示例
帖子 ID 5 与用户 3、4、5 相关
// $relationship is the return value from ->define_post_to_user() $relationship->replace_post_to_user_relationships( 5, array( 3, 4, 5 ) );
PostToUser->replace_user_to_post_relationships( $user_id, $post_ids )
用提供的帖子 ID 集合替换与用户相关的帖子。任何与用户相关的且不在 $post_ids 中的帖子将不再相关。
参数
$user_id
(Int) 我们要替换关系的用户 ID。
$post_ids
(Array) 与 $user_id 相关的帖子 ID 数组
示例
用户 2 与帖子 6、7、8 相关
// $relationship is the return value from ->define_post_to_user() $relationship->replace_user_to_post_relationships( 2, array( 6, 7, 8 ) );
PostToUser->save_post_to_user_sort_data( $object_id, $ordered_user_ids )
对于已启用排序的关系,这保存了特定帖子的用户顺序
参数
$object_id
(Int) 存储用户排序的帖子的ID
$ordered_user_ids
(Array) 用户ID数组,按排序顺序排列。
示例
帖子ID有5个用户需要按以下顺序存储:2, 4, 1, 6, 3
// $relationship is the return value from ->define_post_to_user() $relationship->save_post_to_user_sort_data( 5, array( 2, 4, 1, 6, 3 ) );
PostToUser->save_user_to_post_sort_data( $user_id, $ordered_post_ids )
对于已启用排序的关系,这保存了特定用户的帖子顺序
参数
$user_id
(Int) 存储帖子排序的用户ID
$ordered_post_ids
(Array) 帖子ID数组,按排序顺序排列
示例
用户ID 1有5个帖子需要按以下顺序存储:4, 2, 7, 9, 8
// $relationship is the return value from ->define_post_to_user() $relationship->save_user_to_post_sort_data( 1, array( 4, 2, 7, 9, 8 ) );
支持级别
稳定:10up不计划为此开发任何新功能,但仍将响应错误报告和安全问题。我们欢迎提交Pull Requests,但任何包含新功能的部分应小而易于集成,不应包括破坏性更改。我们否则打算将此测试到WordPress的最新版本。