web-dev-qa-db-ja.com

ユーザープロフィールページで基本的なImage Uploaderを入手する

ユーザープロフィールページに画像アップローダーを追加しようとしています。基本的な登録ページで起動して実行していますが、どういうわけか同じですが、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( 'userphoto_thumb_file', $getId );?>" />

保存された画像をロードしませんか?

IとIIを更新する

基本的なデバッグ

Update IIIisset()を追加した後、もう少し詳しく説明します。

[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

ProfilePictureに適切な$ _POSTオプションがないことに気付きました。 @brasofiloによって言及されたプラグインを見ると http://plugins.svn.wordpress.org/user-avatar/trunk/user-avatar.php 私はこのコードを使用できるかもしれませんが、私はそれをたくさん調整する必要があります。

<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をグローバルにしました

更新VII

無関係なメディアからのオプションの使用を検討する ここ 。しかし、これを私の現在の関数に統合するにはまだかなりの時間がかかるので、うまくいくまでこのスレッドを開いたままにしておきます。

6
rhand

皆さんの提案に感謝します。あなたがGithubでここに見ることができるように結局私はWoothemesメディアアップローダ統合のために行きました: https://github.com/devinsays/options-framework-plugin/blob/master/options-medialibrary-uploader.php It私は自分のテーマに統合しているテーマフレームワークに統合されているので、このように私は一石二鳥です。

0
rhand

このプラグインをチェックしてください: ユーザーアバター 。あなたはそれを使用するか、あなたのものを適応させるためにその機能をチェックすることができます。

1
brasofilo

$profilePicture保存コードの範囲外 で定義されており、グローバルスコープで宣言または使用されることはありません。

結果として、アップロード関数が返すとすぐに、変数はガベージコレクションされるか、同じ名前を共有するまったく異なる変数を扱っていることになります。

私はそれをグローバルとして宣言し、それを使用しようとする前に変数が空であるかどうかをチェックするなどの検証を追加します。

1
Tom J Nowell