Kirim pos dan unggah gambar dari front-end


11

Saya mencoba melakukan sesuatu yang mirip dengan pertanyaan di atas. Saya mencoba membuat pengguna memposting dan mengunggah gambar dari front-end. Saya sudah melakukan form posting dan berfungsi.

Saya hanya mengikuti dan mencoba jawaban yang diposting oleh Robin I Knight upload-post-thumbnail-dari-the-front-end . Sayangnya saya tidak bisa membuatnya bekerja. Apakah ada yang harus saya ubah atau edit?

Terima kasih.

Jawaban:


22

Jika Anda berbicara tentang jawaban yang saya posting di sini , cukup unggah file dalam iframe untuk mencapai "Ajax like".

Sekarang jika Anda sudah memiliki formulir yang menangani pengiriman kiriman, Anda cukup menambahkan input bidang file unggahan di suatu tempat di formulir Anda:

<form ...
...
<input type="file" name="thumbnail" id="thumbnail">
...
...
</form>

pastikan formulir Anda memiliki enctype="multipart/form-data"atribut.

kemudian di skrip pemrosesan formulir Anda setelah Anda membuat posting (dengan asumsi bahwa Anda menggunakan wp_insert_post();) tetap memegang ID posting di var baru:

$new_post = wp_insert_post($post_array);

dan setelah itu tambahkan:

            if (!function_exists('wp_generate_attachment_metadata')){
                require_once(ABSPATH . "wp-admin" . '/includes/image.php');
                require_once(ABSPATH . "wp-admin" . '/includes/file.php');
                require_once(ABSPATH . "wp-admin" . '/includes/media.php');
            }
             if ($_FILES) {
                foreach ($_FILES as $file => $array) {
                    if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                        return "upload error : " . $_FILES[$file]['error'];
                    }
                    $attach_id = media_handle_upload( $file, $new_post );
                }   
            }
            if ($attach_id > 0){
                //and if you want to set that image as Post  then use:
                update_post_meta($new_post,'_thumbnail_id',$attach_id);
            }

dan gambar Anda akan diunggah dan disimpan sebagai gambar mini pos.


@Bainternet terima kasih. Saya kesulitan mendapatkannya untuk memasukkan thumbnail, tetapi untuk beberapa alasan ketika saya mengganti '$ new_post' dengan '$ pid' itu memasukkan thumbnail post
Govnah Antwi-Boasiako

lool aku sangat bodoh. Saya baru saja mengetahui mengapa saya harus menggunakan '$ pid' saya memiliki baris ini$pid = wp_insert_post($new_post);
Govnah Antwi-Boasiako

Senang Anda berhasil, dan lebih baik Anda mengerti maksudnya.
Bainternet

Yap, terima kasih banyak atas bantuannya. Sekarang saya mengerti, saatnya untuk menambahkan beberapa ajax :)
Govnah Antwi-Boasiako

1
Sayangnya saya hanya memiliki satu akun di Stackoverflow sehingga saya hanya dapat memberikan satu upvote untuk Pertanyaan ini. Jawaban sempurna.
hemnath mouli

1

Markup HTML:

 <p>
   <label for="custom-upload">Upload New Image:</label>
   <input type="file" tabindex="3" name="custom-upload" id="custom-upload" />
 </p>
 <?php
  /*Retrieving the image*/
  $attachment = get_post_meta($postid, 'custom_image');

  if($attachment[0]!='')
  {
   echo wp_get_attachment_link($attachment[0], 'thumbnail', false, false);
  }

 ?>

Mengunggah gambar:

<?php
global $post; /*Global post object*/
$post_id = $post->ID; /*Geting current post id*/
$upload = $_FILES['upload']; /*Receive the uploaded image from form*/
add_custom_image($post_id, $upload); /*Call image uploader function*/

function add_custom_image($post_id, $upload)
{
 $uploads = wp_upload_dir(); /*Get path of upload dir of wordpress*/

 if (is_writable($uploads['path']))  /*Check if upload dir is writable*/
 {
  if ((!empty($upload['tmp_name'])))  /*Check if uploaded image is not empty*/
  {
   if ($upload['tmp_name'])   /*Check if image has been uploaded in temp directory*/
   {
    $file=handle_image_upload($upload); /*Call our custom function to ACTUALLY upload the image*/

    $attachment = array  /*Create attachment for our post*/
    (
      'post_mime_type' => $file['type'],  /*Type of attachment*/
      'post_parent' => $post_id,  /*Post id*/
    );

    $aid = wp_insert_attachment($attachment, $file['file'], $post_id);  /*Insert post attachment and return the attachment id*/
    $a = wp_generate_attachment_metadata($aid, $file['file'] );  /*Generate metadata for new attacment*/
    $prev_img = get_post_meta($post_id, 'custom_image');  /*Get previously uploaded image*/
    if(is_array($prev_img))
    {
     if($prev_img[0] != '')  /*If image exists*/
     {
      wp_delete_attachment($prev_img[0]);  /*Delete previous image*/
     }
    }
    update_post_meta($post_id, 'custom_image', $aid);  /*Save the attachment id in meta data*/

    if ( !is_wp_error($aid) ) 
    {
     wp_update_attachment_metadata($aid, wp_generate_attachment_metadata($aid, $file['file'] ) );  /*If there is no error, update the metadata of the newly uploaded image*/
    }
   }
  }
  else
  {
   echo 'Please upload the image.';
  }
 }
}

function handle_image_upload($upload)
{
 global $post;

        if (file_is_displayable_image( $upload['tmp_name'] )) /*Check if image*/
        {
            /*handle the uploaded file*/
            $overrides = array('test_form' => false);
            $file=wp_handle_upload($upload, $overrides);
        }
 return $file;
}
?>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.