ส่งโพสต์และอัปโหลดภาพจากส่วนหน้า


11

ฉันพยายามทำสิ่งที่คล้ายกับคำถามข้างต้น ฉันพยายามทำให้ผู้ใช้โพสต์และอัปโหลดภาพจากส่วนหน้า ฉันได้ทำแบบฟอร์มการโพสต์และการทำงานแล้ว

ฉันเพียงแค่ปฏิบัติตามและพยายามคำตอบโพสต์โดยโรบินผมอัศวินอัปโหลด-โพสต์ภาพขนาดย่อจาก-the-front-end น่าเศร้าที่ฉันไม่สามารถทำงานได้ มีอะไรที่ฉันคิดว่าจะเปลี่ยนแปลงหรือแก้ไข?

ขอขอบคุณ.

คำตอบ:


22

หากคุณกำลังพูดถึงคำตอบที่ฉันโพสต์ไว้ที่นี่ เพียงอัปโหลดไฟล์ใน iframe เพื่อให้ได้ "Ajax like" submit

ตอนนี้ถ้าคุณมีแบบฟอร์มที่จัดการกับการโพสต์แล้วคุณสามารถเพิ่มอินพุตไฟล์อัพโหลดที่อื่นในรูปแบบของคุณ:

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

ตรวจสอบให้แน่ใจว่าฟอร์มของคุณมีenctype="multipart/form-data"แอตทริบิวต์

จากนั้นในสคริปต์การประมวลผลแบบฟอร์มของคุณหลังจากที่คุณสร้างโพสต์ (สมมติว่าคุณกำลังใช้wp_insert_post();) ถือ ID โพสต์ไว้ใน var ใหม่:

$new_post = wp_insert_post($post_array);

และหลังจากนั้นเพิ่ม:

            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);
            }

และภาพของคุณจะถูกอัปโหลดและบันทึกเป็นภาพขนาดย่อของโพสต์


ขอบคุณ @Bainternet ฉันพยายามที่จะแทรกรูปขนาดย่อ แต่ด้วยเหตุผลบางอย่างเมื่อฉันแทนที่ '$ new_post' ด้วย '$ pid' มันจะแทรกรูปขนาดย่อโพสต์
Govnah Antwi-Boasiako

lool ฉันโง่มาก ฉันเพิ่งโอเวอร์คล็อกว่าทำไมฉันถึงต้องใช้ '$ pid' ฉันมีบรรทัดนี้$pid = wp_insert_post($new_post);
Govnah Antwi-Boasiako

ดีใจที่คุณทำงานออกมาและดีกว่าคือคุณมีจุด
Bainternet

ใช่ขอบคุณมากสำหรับความช่วยเหลือของคุณ ตอนนี้ฉันเข้าใจแล้วมันถึงเวลาที่จะเพิ่ม
อาแจ็กซ์

1
น่าเสียดายที่ฉันมีเพียงหนึ่งบัญชีใน Stackoverflow ดังนั้นฉันสามารถให้ upvote เดียวกับคำถามนี้ คำตอบที่สมบูรณ์แบบ
hemnath mouli

1

HTML Markup:

 <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);
  }

 ?>

กำลังอัพโหลดภาพ:

<?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;
}
?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.