问题描述

我正在尝试将图像上传器添加到用户个人资料页面。我确实有一个基本的注册页面运行,但不知何故相同,但稍微调整的代码在添加到 functions.php 时不起作用。该字段被加载,并且 WordPress 确实允许容易的更新,但在配置文件视图中没有显示图像。要获取图像并存储我使用

/********************************************************************
Profile Image Upload Field Code
*********************************************************************/
require_once( STYLESHEETPATH . '/img_upload_resize_crop.php' );

add_action( 'init', 'custom_img_uploader' );

function custom_img_uploader () {

    if (isset($_FILES['profilePicture']['name'])!= "" ) {

if ( $_FILES['profilePicture']['name']!="" ) {
    $your_image = new _image;
    $upload_dir = wp_upload_dir();
    //To Upload
    $your_image->uploadTo = $upload_dir['basedir'].'/';
    $upload = $your_image->upload($_FILES['profilePicture']);


    //To Resize
    $your_image->newPath = $upload_dir['basedir'].'/thumbs/';
    $your_image->newWidth = 150;
    $your_image->newHeight = 200;
    $resized = $your_image->resize();
    $profilePicture=str_replace($upload_dir['basedir'].'/thumbs/', "", $resized );
    unlink($upload);
}else{
    $profilePicture='';
}
}
}

要显示 HTML 中的字段我有:

<!-- begin image uploader field -->
<tr>
<th><label for="profilePicture"><?php _e("Profile Image"); ?></label></th>
<td>
<input type="file" name="profilePicture" id="profilePicture" style="float:left;" />
</td>
</tr>

并保存它,我用这个:

update_user_meta( $user_id, 'userphoto_thumb_height', 59);
update_user_meta( $user_id, 'userphoto_thumb_width', 80 );
update_user_meta( $user_id, 'userphoto_thumb_file', $profilePicture );

有人看到为什么在配置文件中查看此代码:

<?php if(get_the_author_meta( 'userphoto_thumb_file', $getId )!=""){?>
                        <img src="<?=$uploads['baseurl'];?>/thumbs/<?=get_the_author_meta(%20'userphoto_thumb_file',%20$getId%20);?>" />

不加载存储的图像?

更新一和二

基本调试

更新 III 添加 isset()后,我有点进一步:

[28-Mar-2012 07:14:46] PHP Notice:  Undefined variable: profilePicture in /home/user/public_html/wp-content/themes/theme-name/functions.php on line 346

在这一行我有 update_user_meta( $user_id, 'userphoto_thumb_file', $profilePicture );
似乎,即使我有变量 profilePicture 定义,它不被抓住只是一个通知,似乎没有相关,也不会导致上传问题。

更新 IV

我将图像上传器代码包装在一个函数中,并将其添加为一个操作。请参阅上面的更新代码。我还有一个未定义的变量 profilePicture 也不是上传的图像。整个 functions.php 文件在这里 http://pastebin.com/YGYz3Qnv

更新 V

我只是意识到我没有一个很好的 $ _POST 选项的 profilePicture 。看看在 http://plugins.svn.wordpress.org/user-avatar/trunk/user-avatar.php 的 @brasofilo 提到的插件我看到这个代码我可以使用,但我需要调整很多:

<form enctype="multipart/form-data" id="uploadForm" method="POST" action="<?php echo admin_url('admin-ajax.php'); ?>?action=user_avatar_add_photo&step=2&uid=<?php echo $uid; ?>" >
            <label for="upload"><?php _e('Choose an image from your computer:','user-avatar'); ?></label><br /><input type="file" id="upload" name="uploadedfile" />
            <input type="hidden" name="action" value="save" />
            <?php wp_nonce_field('user-avatar') ?>
        <p class="submit"><input type="submit" value="<?php esc_attr_e('Upload'); ?>" /></p>
    </form>

我只是想知道是否需要一个表单,因为它不是其他文本字段,以及我需要添加 $user_id 和如何调整 update_user_meta

更新 VI

根据贡献者的推荐,制作全球 $profilePicture

更新七

考虑使用来自无关媒体 here 的选项。但是,由于我将时间花费在我现在的 functions.php 中,所以我会保持这个线程打开,直到我设法完成这个。

最佳解决方案

感谢大家的建议。最后,我去了 Woothemes Media Uploader 集成,你可以在这里看到 Github:https://github.com/devinsays/options-framework-plugin/blob/master/options-medialibrary-uploader.php 它被整合到一个主题框架中,我将整合在我自己的主题中,这样我就可以用一只石头杀死两只鸟。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。