如何将自定义文件字段添加到 WordPress 中的用户配置文件?

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

我在网上找到了无数关于如何向 WordPress 中的用户配置文件添加额外自定义字段的示例。但他们都没有展示如何添加字段来上传文件。

这是我为我的额外字段得到的:

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );

function extra_user_profile_fields( $user ) {
?>
    <h3><?php _e("Extra Information", "blank"); ?></h3>
    <table class="form-table">

        <tr>
            <th><label for="my_document"><?php _e("My Document"); ?></label></th>
            <td>
                <input type="file" name="my_document" id="my_document" value="<?php echo esc_attr( get_the_author_meta( 'my_document', $user->ID ) ); ?>" />
            </td>
        </tr>

    </table>

<?php
}

然后提交表格:

add_action( 'personal_options_update', 'yoursite_save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'yoursite_save_extra_user_profile_fields' );

function yoursite_save_extra_user_profile_fields( $user_id ) {
    $saved = false;

    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;

    if(!empty($_FILES['my_document']['name'])) {

        // Use the WordPress API to upload the file
        $upload = wp_upload_bits($_FILES['my_document']['name'], null, file_get_contents($_FILES['my_document']['tmp_name']));

        if(isset($upload['error']) && $upload['error'] != 0) {
            wp_die('There was an error uploading your file. The error is: ' . $upload['error']);
        } else {
            add_post_meta($user_id, 'my_document', $upload);
            update_post_meta($user_id, 'my_document', $upload);
        } // end if/else

    } // end if

}

文档没有保存,我怀疑编辑配置文件中的表单没有上传文件的标签。我也不知道保存后如何在前端检索文档,以向用户显示他已上传文件。

php wordpress file-upload
4个回答
3
投票

这对我有用:

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );

function extra_user_profile_fields( $user ) {
?>
    <h3><?php _e("Extra Information", "blank"); ?></h3>
    <table class="form-table">
        <tr>
            <th scope="row">My Document</th>
            <td><input type="file" name="my_document" value="" />
            <?php
                $doc = get_user_meta( $user->ID, 'my_document', true );
                if (!isset($doc['error'])) {
                    $doc = $doc['url'];
                    echo "<img src='$doc' />";
                } else {
                    $doc = $doc['error'];
                    echo $doc;
                }
            ?>
            </td>
        </tr>
    </table>

<?php
}
add_action( 'personal_options_update', 'yoursite_save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'yoursite_save_extra_user_profile_fields' );

function yoursite_save_extra_user_profile_fields( $user_id ) {
    if ( !current_user_can( 'edit_user', $user_id ) )
        return false;
    if( $_FILES['my_document']['error'] === UPLOAD_ERR_OK ) {
        $_POST['action'] = 'wp_handle_upload';
        $upload_overrides = array( 'test_form' => false );
        $upload = wp_handle_upload( $_FILES['my_document'], $upload_overrides );
        update_user_meta( $user_id, 'my_document', $upload );
    }
}

0
投票

转储输出时,您在控制台中看到什么?

var_dump($upload);

这可能与 /tmp 目录权限(或存在)有关。

如果这不是您要问的,我很抱歉,但是您尝试过ACF吗?

以下是如何从用户字段组获取字段。


0
投票

还有两件事要添加到 simplethemes 的解决方案中:

  1. 确保前端的
    <form>
    具有
    enctype="multipart/form-data"
    属性。
  2. 使用该功能前请务必添加
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
    wp_handle_upload()

0
投票

只需在用户编辑页面上添加 enctype 即可,对我来说效果很好。 非常感谢@fouarges,你救了我!

© www.soinside.com 2019 - 2024. All rights reserved.