Distributor: 扩展以支持后元关联...

创建于 2020-07-08  ·  3评论  ·  资料来源: 10up/distributor

你好,

在警告中,有一个关于后期元关联的说明,指定这些不会在传输中“带来”。 在我开发具有复杂关系元数据(使用 ACF)的站点网络时,我有两个问题:

  • 该注释引用了“推送”传输。 “拉”请求也是如此吗?
  • 是否有建议的插件“逐案”扩展的示例? 我很想尝试一下,但不知道从哪里开始!

提前致谢!

Reporter Feedback question

最有用的评论

嗨@john-lynch-cp,我们对这个话题进行了一些内部讨论,但我们还没有最终的方向。

保存的元值是相关对象的ID,在原始站点和远程站点之间是不同的。 您可以通过用远程站点上的正确对象 ID(元值)替换对象 ID(元值)来解决此问题:

  • 对于帖子:我们有dt_connection_map元,可用于检索远程帖子 ID。
  • 对于用户和术语,您可以使用 slug 在远程站点上查找正确的术语。

您可以通过挂钩到dt_push_post_argsdt_subscription_post_args来准备帖子元数据(更改帖子 ID、添加术语 slug、添加用户登录)。

要更新远程站点上的正确元值,请挂钩dt_process_distributor_attributesdt_process_subscription_attributes

对于您的问题:

该注释引用了“推送”传输。 “拉”请求也是如此吗?

简短的回答是否定的,推和拉是不同的。 虽然使用 pull 可以达到与 push 相同的结果,但您需要一些额外的步骤来准备 post meta。 对于push ,因为您是原始站点,所以您可以在推送之前准备额外的元数据。 但是你不能用pull做同样的事情。 Distributor 使用posts 端点来获取pull的post 数据,参见这个

是否有建议的插件“逐案”扩展的示例? 我很想尝试一下,但不知道从哪里开始!

例如,您有一个名为test_meta的分类字段(使用 ACF),它链接到project_category分类。 请注意,下面的示例仅用于教育目的,它不是最佳解决方案。

add_action( 'dt_push_post_args', 'prepare_meta', 10, 2 );

function prepare_meta( $post_body, $post ) {
    $term_id = get_post_meta( $post->ID, 'test_meta', true );
    if( $term_id ) {
        $term = get_term_by( 'id', $term_id, 'project_category');
        $post_body['project_category_slug'] = $term->slug;
    }

    return $post_body;
}

add_action( 'dt_process_distributor_attributes', 'set_meta', 10, 2 );

function set_meta( $post, $request ) {
    $term = get_term_by( 'slug', $request['project_category_slug'], 'project_category' );
    if ( ! $term ) {
        return;
    }
    update_post_meta( $post->ID, 'test_meta', $term->term_id );
}

顺便说一句,Novembit 有一个插件,它类似于上面的例子,但更复杂: https :

希望这有帮助!

所有3条评论

嗨@john-lynch-cp,我们对这个话题进行了一些内部讨论,但我们还没有最终的方向。

保存的元值是相关对象的ID,在原始站点和远程站点之间是不同的。 您可以通过用远程站点上的正确对象 ID(元值)替换对象 ID(元值)来解决此问题:

  • 对于帖子:我们有dt_connection_map元,可用于检索远程帖子 ID。
  • 对于用户和术语,您可以使用 slug 在远程站点上查找正确的术语。

您可以通过挂钩到dt_push_post_argsdt_subscription_post_args来准备帖子元数据(更改帖子 ID、添加术语 slug、添加用户登录)。

要更新远程站点上的正确元值,请挂钩dt_process_distributor_attributesdt_process_subscription_attributes

对于您的问题:

该注释引用了“推送”传输。 “拉”请求也是如此吗?

简短的回答是否定的,推和拉是不同的。 虽然使用 pull 可以达到与 push 相同的结果,但您需要一些额外的步骤来准备 post meta。 对于push ,因为您是原始站点,所以您可以在推送之前准备额外的元数据。 但是你不能用pull做同样的事情。 Distributor 使用posts 端点来获取pull的post 数据,参见这个

是否有建议的插件“逐案”扩展的示例? 我很想尝试一下,但不知道从哪里开始!

例如,您有一个名为test_meta的分类字段(使用 ACF),它链接到project_category分类。 请注意,下面的示例仅用于教育目的,它不是最佳解决方案。

add_action( 'dt_push_post_args', 'prepare_meta', 10, 2 );

function prepare_meta( $post_body, $post ) {
    $term_id = get_post_meta( $post->ID, 'test_meta', true );
    if( $term_id ) {
        $term = get_term_by( 'id', $term_id, 'project_category');
        $post_body['project_category_slug'] = $term->slug;
    }

    return $post_body;
}

add_action( 'dt_process_distributor_attributes', 'set_meta', 10, 2 );

function set_meta( $post, $request ) {
    $term = get_term_by( 'slug', $request['project_category_slug'], 'project_category' );
    if ( ! $term ) {
        return;
    }
    update_post_meta( $post->ID, 'test_meta', $term->term_id );
}

顺便说一句,Novembit 有一个插件,它类似于上面的例子,但更复杂: https :

希望这有帮助!

@john-lynch-cp 以上回复是否解决了您的问题,以便我们可以解决此问题,或者您有任何后续问题吗?

感谢您的跟进,很高兴您现在可以关闭它。 我认为我们正在寻找不同的 CMS,因为分发挑战可能更有意义。

此页面是否有帮助?
0 / 5 - 0 等级