ACF关系字段双向元数据
创始人
2024-07-23 09:00:36
0

使用Advanced Custom Fields(ACF)插件,可以轻松地创建关系字段以建立任何两个自定义帖子类型之间的链接关系。然而,这种建立的关系是单向的,即只会显示一条链接。为了在以后回溯时方便双向工作,需要建立双向元数据。

下面是如何实现此功能的代码示例:

// 在第一个自定义帖子类型(即来源帖子类型)中添加以下代码 add_action('acf/update_value/name=related_custom_type', 'update_bidirectional_relationship', 10, 3);

function update_bidirectional_relationship($value, $post_id, $field) { // 从ACF中获取该自定义字段的名称和ID $field_name = $field['name']; $field_key = $field['key'];

// 获取关联帖子的ID并建立双向关系
foreach($value as $related_post_id)
{
    // 获取相关帖子类型
    $related_post_type = get_post_type($related_post_id);

    // 获取相关字段的名称
    $related_field_name = 'related_custom_type_' . $related_post_type;

    // 获取相关字段的ID
    $related_field_id = get_field($related_field_name, $related_post_id, false);

    // 更新相关帖子类型的相关字段
    if($related_field_id && is_array($related_field_id))
    {
        if(!in_array($post_id, $related_field_id))
        {
            $related_field_id[] = $post_id;
        }

        update_field($related_field_name, $related_field_id, $related_post_id);
    }
    else
    {
        update_field($related_field_name, array($post_id), $related_post_id);
    }
}

return $value;

}

// 在第二个自定义帖子类型(即目标帖子类型)中添加以下代码 add_filter('acf/load_value/name=related_custom_type', 'load_bidirectional_relationship', 10, 3);

function load_bidirectional_relationship($value

相关内容

热门资讯

Android Recycle... 要在Android RecyclerView中实现滑动卡片效果,可以按照以下步骤进行操作:首先,在项...
安装apache-beam==... 出现此错误可能是因为用户的Python版本太低,而apache-beam==2.34.0需要更高的P...
Android - 无法确定任... 这个错误通常发生在Android项目中,表示编译Debug版本的Java代码时出现了依赖关系问题。下...
Android - NDK 预... 在Android NDK的构建过程中,LOCAL_SRC_FILES只能包含一个项目。如果需要在ND...
Akka生成Actor问题 在Akka框架中,可以使用ActorSystem对象生成Actor。但是,当我们在Actor类中尝试...
Agora-RTC-React... 出现这个错误原因是因为在 React 组件中使用,import AgoraRTC from “ago...
Alertmanager在pr... 首先,在Prometheus配置文件中,确保Alertmanager URL已正确配置。例如:ale...
Aksnginxdomainb... 在AKS集群中,可以使用Nginx代理服务器实现根据域名进行路由。以下是具体步骤:部署Nginx i...
AddSingleton在.N... 在C#中创建Singleton对象通常是通过私有构造函数和静态属性来实现,例如:public cla...
Alertmanager中的基... Alertmanager中可以使用repeat_interval选项指定在一个告警重复发送前必须等待...