ACF使用自定义表单在前端上传图像

时间:2017-10-11 作者:Marcelo Henriques Cortez

我为我的订阅者创建了额外的字段,其中一个是图像字段,所以他们可以将图像上载到他们的个人资料中。

我用ACF(高级自定义字段)创建了字段。

我有一个自定义的注册表单和一个自定义的编辑表单,以及常规的WordPress字段和额外的字段。一切都很完美。。。图像字段除外。

我不担心注册表,我接受用户在注册时不会上传图像,但我需要他们在编辑信息时能够编辑/上传图像。

附言(1):图像将被用作头像,我不会使用常规的WordPress头像

附言(2):我不会使用acf\\U表单(),因为我需要对表单的工作方式进行太多的编辑

Here is part of the code:

<label for="avatar_user"></label>
<input class="text-input" name="avatar_user" type="file" id="avatar_user" value="<?php the_author_meta( \'avatar_user\', $current_user->ID ); ?>" />

if ( !empty( $_POST[\'avatar_user\'] ) ) :
   update_user_meta( $current_user->ID, \'avatar_user\', esc_attr( $_POST[\'avatar_user\'] ) );

2 个回复
最合适的回答,由SO网友:Marcelo Henriques Cortez 整理而成

好的,我把它和“media\\u handle\\u upload”(由@Piyush指出)一起使用,并对我的表单代码进行了一些调整。

So, here is what I did:

首先-确保表单具有属性“enctype=”multipart/form data“。

第二,确保“input=file”没有value属性。

第三,使用“media\\u handle\\u upload”并传递“input=file”的名称。

Forth-例如,检查“is\\U wp\\U error”是否有错误。

第五,使用要更新的字段名称更新用户元(在我的情况下,与“input=file”的“name”相同)。

Here is part of the final code:

<form method="post" id="adduser" enctype=\'multipart/form-data\'>
    <input class="text-input" name="avatar_user" type="file" id="avatar_user" multiple="false"/>
    <input name="updateuser" type="submit" id="updateuser" class="submit button" value="<?php _e(\'GRAVAR\', \'profile\'); ?>" />
    <input name="action" type="hidden" id="action" value="update-user" />
</form>

/* If profile was saved, update profile. */
if ( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) && $_POST[\'action\'] == \'update-user\' ) {

    // These files need to be included as dependencies when on the front end.
    require_once( ABSPATH . \'wp-admin/includes/image.php\' );
    require_once( ABSPATH . \'wp-admin/includes/file.php\' );
    require_once( ABSPATH . \'wp-admin/includes/media.php\' );

    // Let WordPress handle the upload.
    $img_id = media_handle_upload( \'avatar_user\', 0 );

    if ( is_wp_error( $img_id ) ) {
      echo "Error";
    } else {
      update_user_meta( $current_user->ID, \'avatar_user\', $img_id );
    }
}

SO网友:Randomer11

也许这样做会有所帮助:

// Deal with images uploaded from the front-end while allowing ACF to do it\'s thing
function my_acf_pre_save_post($post_id) {

if ( !function_exists(\'wp_handle_upload\') ) {
require_once(ABSPATH . \'wp-admin/includes/file.php\');
}

// Move file to media library
$movefile = wp_handle_upload( $_FILES[\'my_image_upload\'], array(\'test_form\' => false) );

// If move was successful, insert WordPress attachment
if ( $movefile && !isset($movefile[\'error\']) ) {
$wp_upload_dir = wp_upload_dir();
$attachment = array(
\'guid\' => $wp_upload_dir[\'url\'] . \'/\' . basename($movefile[\'file\']),
\'post_mime_type\' => $movefile[\'type\'],
\'post_title\' => preg_replace( \'/\\.[^.]+$/\', ”, basename($movefile[\'file\']) ),
\'post_content\' => ”,
\'post_status\' => \'inherit\'
);
$attach_id = wp_insert_attachment($attachment, $movefile[\'file\']);

// Assign the file as the featured image
set_post_thumbnail($post_id, $attach_id);
update_field(\'my_image_upload\', $attach_id, $post_id);

}

return $post_id;

}

add_filter(\'acf/pre_save_post\' , \'my_acf_pre_save_post\');
复制这篇文章中的代码,我下面链接的页面会破坏格式,所以我在上面的示例中修复了它。

资料来源:https://support.advancedcustomfields.com/forums/topic/uploading-imagefile-on-the-front-end/

结束

相关推荐

Users redirected to old site

如果我以管理员身份登录,一切都很好。但是,如果我以用户身份登录,它会重定向到旧的测试站点(用于运行站点的开发服务器)。我已经检查了数据库中的siteurl和home值是否正确。我也在使用付费会员pro插件。我搜索了数据库,找到了740个旧URL的条目:(有人能建议在不破坏现场的情况下,最好的前进方式吗?谢谢

ACF使用自定义表单在前端上传图像 - 小码农CODE - 行之有效找到问题解决它

ACF使用自定义表单在前端上传图像

时间:2017-10-11 作者:Marcelo Henriques Cortez

我为我的订阅者创建了额外的字段,其中一个是图像字段,所以他们可以将图像上载到他们的个人资料中。

我用ACF(高级自定义字段)创建了字段。

我有一个自定义的注册表单和一个自定义的编辑表单,以及常规的WordPress字段和额外的字段。一切都很完美。。。图像字段除外。

我不担心注册表,我接受用户在注册时不会上传图像,但我需要他们在编辑信息时能够编辑/上传图像。

附言(1):图像将被用作头像,我不会使用常规的WordPress头像

附言(2):我不会使用acf\\U表单(),因为我需要对表单的工作方式进行太多的编辑

Here is part of the code:

<label for="avatar_user"></label>
<input class="text-input" name="avatar_user" type="file" id="avatar_user" value="<?php the_author_meta( \'avatar_user\', $current_user->ID ); ?>" />

if ( !empty( $_POST[\'avatar_user\'] ) ) :
   update_user_meta( $current_user->ID, \'avatar_user\', esc_attr( $_POST[\'avatar_user\'] ) );

2 个回复
最合适的回答,由SO网友:Marcelo Henriques Cortez 整理而成

好的,我把它和“media\\u handle\\u upload”(由@Piyush指出)一起使用,并对我的表单代码进行了一些调整。

So, here is what I did:

首先-确保表单具有属性“enctype=”multipart/form data“。

第二,确保“input=file”没有value属性。

第三,使用“media\\u handle\\u upload”并传递“input=file”的名称。

Forth-例如,检查“is\\U wp\\U error”是否有错误。

第五,使用要更新的字段名称更新用户元(在我的情况下,与“input=file”的“name”相同)。

Here is part of the final code:

<form method="post" id="adduser" enctype=\'multipart/form-data\'>
    <input class="text-input" name="avatar_user" type="file" id="avatar_user" multiple="false"/>
    <input name="updateuser" type="submit" id="updateuser" class="submit button" value="<?php _e(\'GRAVAR\', \'profile\'); ?>" />
    <input name="action" type="hidden" id="action" value="update-user" />
</form>

/* If profile was saved, update profile. */
if ( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) && $_POST[\'action\'] == \'update-user\' ) {

    // These files need to be included as dependencies when on the front end.
    require_once( ABSPATH . \'wp-admin/includes/image.php\' );
    require_once( ABSPATH . \'wp-admin/includes/file.php\' );
    require_once( ABSPATH . \'wp-admin/includes/media.php\' );

    // Let WordPress handle the upload.
    $img_id = media_handle_upload( \'avatar_user\', 0 );

    if ( is_wp_error( $img_id ) ) {
      echo "Error";
    } else {
      update_user_meta( $current_user->ID, \'avatar_user\', $img_id );
    }
}

SO网友:Randomer11

也许这样做会有所帮助:

// Deal with images uploaded from the front-end while allowing ACF to do it\'s thing
function my_acf_pre_save_post($post_id) {

if ( !function_exists(\'wp_handle_upload\') ) {
require_once(ABSPATH . \'wp-admin/includes/file.php\');
}

// Move file to media library
$movefile = wp_handle_upload( $_FILES[\'my_image_upload\'], array(\'test_form\' => false) );

// If move was successful, insert WordPress attachment
if ( $movefile && !isset($movefile[\'error\']) ) {
$wp_upload_dir = wp_upload_dir();
$attachment = array(
\'guid\' => $wp_upload_dir[\'url\'] . \'/\' . basename($movefile[\'file\']),
\'post_mime_type\' => $movefile[\'type\'],
\'post_title\' => preg_replace( \'/\\.[^.]+$/\', ”, basename($movefile[\'file\']) ),
\'post_content\' => ”,
\'post_status\' => \'inherit\'
);
$attach_id = wp_insert_attachment($attachment, $movefile[\'file\']);

// Assign the file as the featured image
set_post_thumbnail($post_id, $attach_id);
update_field(\'my_image_upload\', $attach_id, $post_id);

}

return $post_id;

}

add_filter(\'acf/pre_save_post\' , \'my_acf_pre_save_post\');
复制这篇文章中的代码,我下面链接的页面会破坏格式,所以我在上面的示例中修复了它。

资料来源:https://support.advancedcustomfields.com/forums/topic/uploading-imagefile-on-the-front-end/