Wordpress / Fluent Form / ACF:用户编辑和更新一篇文章

问题描述 投票:0回答:2

我创建了一个名为“Profile”的 ACF 帖子类型

我希望登录的用户能够填写自己的个人资料并通过 Fluent Form 进行编辑。 用户只有一个“个人资料”帖子内容,因此当他转到链接到 ACF“个人资料”内容的 Fluent Form 时,他要么创建一个新帖子(如果他没有),要么更新其现有信息。

所以我将“Post/CPT Creation”与帖子提要一起使用。

如果我使用提交类型“新帖子”,一个用户可以创建多个个人资料(这不是我想要的)

如果我使用提交类型“更新帖子”,则不会创建内容。也许我需要在“新帖子”和另一个“更新帖子”上创建 2 个帖子提要。我不太明白...

我也尝试过“帖子更新”字段,但由于每个用户只有一篇帖子,我发现要求他们在此选择中选择他们的个人资料是没有意义的。 (即使我用它的 userid 限制该字段)

有没有办法拥有一个表单,如果用户没有任何个人资料,他可以创建它。如果他已经有个人资料,表单将加载其信息以允许他更新。

我有 PHP / Javscript Dev,所以如果这是一个解决方案,我可以使用片段(function.php)。

谢谢

塞缪尔

wordpress advanced-custom-fields
2个回答
1
投票

第 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。

这样,隐藏字段值将根据用户是否有个人资料帖子而动态变化。


0
投票

非常感谢易卜拉欣·穆斯塔法!

你的解决方案很好,但 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);
© www.soinside.com 2019 - 2024. All rights reserved.