web-dev-qa-db-ja.com

カスタム画像アップロード

カスタム投稿フォームの添付ファイルのアップロードを設定しようとしています。

最初にformタグにenctype="multipart/form-data"を追加します

テスト目的で2つのアップロードフォームがありますが、将来的には1つのフォームのみを実装し、jQueryを使用して必要な数のフォームを追加します。

    <fieldset class="images">
        <label for="images">Front of the Bottle</label>
        <input type="file" name="image1" id="bottle_front" size="50">
    </fieldset>
    <fieldset class="images">
        <label for="images">Back of the Bottle</label>
        <input type="file" name="image2" id="bottle_rear" size="50">
    </fieldset>

PHPで使用します。

    if ($_FILES) {
        foreach ($_FILES as $file => $array) {
            $newupload = insert_attachment($file,$post_id);
            // $newupload returns the attachment id of the file that
            // was just uploaded. Do whatever you want with that now.
        }
    }

そしてfunctions.phpに私はこの形式を扱うべき関数があります。

function insert_attachment($file_handler,$post_id,$setthumb='false') {
 // check to make sure its a successful upload
 if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) __return_false();

 require_once(ABSPATH . "wp-admin" . '/includes/image.php');
 require_once(ABSPATH . "wp-admin" . '/includes/file.php');
 require_once(ABSPATH . "wp-admin" . '/includes/media.php');

 $attach_id = media_handle_upload( $file_handler, $post_id );

 if ($setthumb) update_post_meta($post_id,'_thumbnail_id',$attach_id);
 return $attach_id;
 }

2つの画像をアップロードするだけですべてがうまくいきますが、1つのOR noneのみをアップロードする場合は、post_meta dbエラーが発生します。

O:8:"WP_Error":2:{s:6:"errors";a:1:{s:12:"upload_error";a:1:{i:0;s:21:"No file was uploaded.";}}s:10:"error_data";a:0:{}}

挿入してみました:if($ _FILES [$ file_handler] ['エラー'] === 4)__return_false(); functions.phpでそれが動作しません、私のフォームが空であることを私のスクリプトに伝える方法?

クレジット: ここからこのフォームを取った

1
CBeTJlu4ok

あなたが関数から正しく戻っていないのかもしれません、これを試してください、

function insert_attachment($file_handler, $post_id, $setthumb=false) {
    // check to make sure its a successful upload
    // changes start
    if ($_FILES[$file_handler]['error'] !== UPLOAD_ERR_OK) {
        return __return_false();
    }
    // changes 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');

    $attach_id = media_handle_upload( $file_handler, $post_id );

    if ($setthumb)
        update_post_meta($post_id, '_thumbnail_id', $attach_id);
    return $attach_id;
}
4
Rajeev Vyas

私の見解では、Wordpressの既存のネイティブ関数特集画像を単純に再利用するほうが良いでしょう。

カスタム投稿の登録中にオプションを追加して有効にできます

'supports' => array('thumbnail')

他の多くの便利なネイティブ関数など

1
c24b