我创建了一个名为“Profile”的 ACF 帖子类型
我希望登录的用户能够填写自己的个人资料并通过 Fluent Form 进行编辑。 用户只有一个“个人资料”帖子内容,因此当他转到链接到 ACF“个人资料”内容的 Fluent Form 时,他要么创建一个新帖子(如果他没有),要么更新其现有信息。
所以我将“Post/CPT Creation”与帖子提要一起使用。
如果我使用提交类型“新帖子”,一个用户可以创建多个个人资料(这不是我想要的)
如果我使用提交类型“更新帖子”,则不会创建内容。也许我需要在“新帖子”和另一个“更新帖子”上创建 2 个帖子提要。我不太明白...
我也尝试过“帖子更新”字段,但由于每个用户只有一篇帖子,我发现要求他们在此选择中选择他们的个人资料是没有意义的。 (即使我用它的 userid 限制该字段)
有没有办法拥有一个表单,如果用户没有任何个人资料,他可以创建它。如果他已经有个人资料,表单将加载其信息以允许他更新。
我有 PHP / Javscript Dev,所以如果这是一个解决方案,我可以使用片段(function.php)。
谢谢
塞缪尔
第 1 步:确定用户是否有个人资料帖子
function user_has_profile_post() {
$user_id = get_current_user_id();
$args = array(
'post_type' => 'profile', // Adjust post type as needed
'author' => $user_id,
'posts_per_page' => 1,
);
$query = new WP_Query($args);
return $query->have_posts();
}
第 2 步:根据用户状态创建/更新帖子
现在,您需要使用 Fluent Forms 来确定用户是否应该创建新帖子或更新现有帖子。您可以使用表单中的“条件逻辑”设置来实现此目的。
创建隐藏字段用于用户个人资料检查:
向您的表单添加一个隐藏字段,并使用短代码 [user_has_profile] 设置其默认值(根据您的实现调整短代码)。 设置创建/更新的条件逻辑:
对于与个人资料信息相关的字段,设置条件逻辑,以在隐藏字段值等于“false”(表示用户没有个人资料)时显示它们。 对于相同的字段,设置另一组条件逻辑,以在隐藏字段值等于“true”(表明用户拥有个人资料)时显示它们。 创建/更新帖子操作:
对于“提交”或“更新”按钮,使用 Fluent Forms 的帖子提要根据条件逻辑创建或更新帖子。 对于与创建新帖子关联的“帖子提要”,设置当隐藏字段值等于“false”时运行的条件。 对于与更新帖子相关的“帖子提要”,设置当隐藏字段值等于“true”时运行的条件。
第3步:实现隐藏字段逻辑 现在,您需要在主题的functions.php 文件中实现隐藏字段值的逻辑。
function set_user_profile_check_field_value($form, $args) {
// Check if the user has a profile post
$has_profile = user_has_profile_post();
// Set the value of the hidden field based on the user's profile status
$form['fields']['hidden_field']['defaultValue'] = $has_profile ? 'true' : 'false';
return $form;
} add_filter('fluidform_rendering_form_args', 'set_user_profile_check_field_value', 10, 2);
将“hidden_field”替换为隐藏字段的实际名称或 ID。
这样,隐藏字段值将根据用户是否有个人资料帖子而动态变化。
非常感谢易卜拉欣·穆斯塔法!
你的解决方案很好,但 FluentFilter 已经改变了
这是我的解决方案:
// return the ACF Post Id of current user
function user_has_family_post() {
$user_id = get_current_user_id();
$args = array(
'post_type' => 'family', // Adjust post type as needed
'author' => $user_id,
'posts_per_page' => 1,
);
$query = new WP_Query($args);
$query->have_posts();
$query->the_post();
return get_the_ID();
}
// modify FluentForm to set :
// - user_has_family_post to true or false (use on conditionnal in fluentform submition type "create" or "update")
// - fluentform "post_update" field to ACF Post Id of user content
function set_user_has_family_field_value($form) {
$profile_id = user_has_family_post();
foreach($form->fields["fields"] as $key => $field):
if($field["attributes"]["name"] == 'user_has_family_post') {
$form->fields["fields"][$key]["attributes"]["value"] = $profile_id ? 'true' : 'false';
}
if($field["attributes"]["name"] == 'post_update') {
$form->fields["fields"][$key]["attributes"]["value"] = $profile_id;
}
endforeach;
return $form;
}
add_filter('fluentform/rendering_form', 'set_user_has_family_field_value', 10, 2);