web-dev-qa-db-ja.com

Wordpressのユーザープロファイルのアップロード - ページが保存されている場合ファイルのリセット

私はfunctions.phpで設定したさまざまな追加のプロファイルフィールドを持っていますが、ユーザーが画像をアップロードしてフォームを保存した場合はアップロードしますヌル。

これが私のfunctions.phpファイルにあるコードです。どんな助けでも本当に感謝されるでしょう。

     <?php

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

function extra_user_profile_fields( $user ) { 

$r = get_user_meta( $user->ID, 'picture', true );
    ?>


<!-- Artist Photo Gallery -->
<h3><?php _e("Public Profile - Gallery", "blank"); ?></h3>

<table class="form-table">

<tr>
        <th scope="row">Picture</th>
        <td><input type="file" name="picture" value="" />

            <?php //print_r($r); 
                if (!isset($r['error'])) {
                    $r = $r['url'];
                    echo "<img src='$r' />";
                } else {
                    $r = $r['error'];
                    echo $r;
                }
            ?>
        </td>
    </tr>

</table> 



<?php
}

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

function save_extra_user_profile_fields( $user_id ) {

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

$_POST['action'] = 'wp_handle_upload';
$r = wp_handle_upload( $_FILES['picture'] );
update_user_meta( $user_id, 'picture', $r, get_user_meta( $user_id, 'picture', true ) );

}

}

add_action('user_edit_form_tag', 'make_form_accept_uploads');
function make_form_accept_uploads() {
    echo ' enctype="multipart/form-data"';
}
1
Storm3y

前の値である update_user_meta() の最後のパラメーターは、オプションのパラメーターです。もし設定されていれば、データベースの値が実際にあなたがupdate_user_meta()を与えたものであるかどうかチェックします。データベースから値を取得してそのパラメータを設定した場合、それは完全に冗長です。だから最初に、それを省略します。

そうは言っても、これは上書きに関するあなたの問題を解決するものです。

if( $_FILES['picture']['error'] === UPLOAD_ERR_OK ) {
    $upload_overrides = array( 'test_form' => false ); // if you don’t pass 'test_form' => FALSE the upload will be rejected
    $r = wp_handle_upload( $_FILES['picture'], $upload_overrides );
    update_user_meta( $user_id, 'picture', $r );
}

UPLOAD_ERR_OKはステータスメッセージであり、エラーではないので、用語は少しわかりにくいですが、アップロードが成功したかどうかを確認する方法です。それをメタ値を保存するための条件にすれば、うまくいくでしょう。

$_FILES スーパーグローバルのエラーまたはステータスの詳細については、 を参照してください。 PHPマニュアルからを説明しました

編集:アップロードされた画像のURLを取得する方法

この編集は、この回答に対するコメント内の拡張された質問に対応しています。

$pic_data = get_user_meta( $curauth->ID, 'picture', true );
$pic_url = $pic_data['url'];

uRLを変数に保存します。その結果、好きな場所にエコーすることができます。 $curauthが現在のユーザーオブジェクトであると仮定します。あなたは代わりにグローバルなWordPress変数$current_userを使うことができます、しかし、あなたがすでにオブジェクトを持っているならば、それも同様に使うかもしれません。

2
Johannes Pille

//ファイルアップロード用add_action( 'user_edit_form_tag'、 'make_form_accept_uploads');関数make_form_accept_uploads(){echo 'enctype = "multipart/form-data"'; }

function custom_user_profile_fields($ user){if(is_object($ user)){$ r = get_user_meta($ user-> ID、 'portfolioimage'、true); } else {$ r = null。 }

?>

見出し

<table class="form-table">
  <h3>Portfolio</h3>
  <tr>
    <th>
      <label for="image">Portfolio Image</label>
    </th>
    <td>
    <?php 
    if (!isset($r['error'])) 
    {
      $r = $r['url'];
      echo "<img src='$r' width='96' hieght='96'/>";
    }
    else
    {
      $r = $r['error'];
      echo $r;
    }
    ?>
    <br/>
    <span class="description">
       Please upload an image for your profile.
    </span>
    <br/>
    <input type="file" class="button-primary" value="Upload Image" id="portfolioimage" name="portfolioimage" multiple/><br />
  </td>
</tr>


add_action( "show_user_profile"、 "custom_user_profile_fields"); add_action( "edit_user_profile"、 "custom_user_profile_fields"); add_action( "user_new_form"、 "custom_user_profile_fields");関数save_custom_user_profile_fields($ user_id){

あなたができる場合に限り、これもやります

if(!current_user_can( 'manage_options'))がfalseを返す場合。

if($ _FILES ['portfolioimage'] ['error'] === UPLOAD_ERR_OK){$ upload_overrides = array( 'test_form' => false); $ r = wp_handle_upload($ _FILES ['portfolioimage']、$ upload_overrides); update_user_meta($ user_id、 'portfolioimage'、$ r); }}

add_action( 'user_register'、 'save_custom_user_profile_fields'); add_action( 'profile_update'、 'save_custom_user_profile_fields');

0
Kundan Naik