10up/wp-content-connect

WordPress的帖子和用户库之间的直接关系

安装: 6,081

依赖关系: 0

建议者: 0

安全性: 0

星级: 82

观察者: 12

分支: 21

开放问题: 17

语言:JavaScript

1.5.0 2019-03-29 20:53 UTC

README

WordPress库,允许帖子之间和帖子与用户之间的直接关系。

Support Level Release Version WordPress tested up to version GPLv3 License

安装和用法

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) 关系的选项数组

参数

参数期望为关系的fromto侧提供选项,作为顶级键。每个方向的选项如下

  • enable_ui (Bool) - 是否为当前关系的这一侧启用默认UI
  • sortable (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) - 是否为当前关系的这一侧启用默认UI
  • sortable (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 非常相似。

一个有效的查询关系段 必须 包含 namerelated_to_postrelated_to_user。可以组合尽可能多的关系段以创建一组特定结果,并可以使用 ANDOR 关系进行组合。

顶层参数

  • 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_QueryWP_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的最新版本。

喜欢你所看到的吗?