Gửi bài đăng và tải lên hình ảnh từ front-end


11

Tôi đang cố gắng làm một cái gì đó tương tự như câu hỏi trên. Tôi đang cố gắng làm cho người dùng đăng và tải lên hình ảnh từ front-end. Tôi đã thực hiện các hình thức bài và hoạt động của nó.

Tôi chỉ theo dõi và thử câu trả lời được đăng bởi Robin I Knight, tải lên, đăng lên hình thu nhỏ từ đầu cuối . Đáng buồn là tôi không thể làm cho nó hoạt động. Có bất cứ điều gì tôi cho là để thay đổi hoặc chỉnh sửa?

Cảm ơn bạn.

Câu trả lời:


22

Nếu bạn đang nói về câu trả lời tôi đã đăng ở đây, nó chỉ đơn giản là tải lên tệp trong iframe để đạt được "Ajax like".

Bây giờ nếu bạn đã có một biểu mẫu xử lý việc gửi bài, bạn chỉ cần thêm đầu vào trường tệp tải lên ở đâu đó trong biểu mẫu của bạn:

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

hãy chắc chắn rằng hình thức của bạn có enctype="multipart/form-data"thuộc tính.

sau đó trong tập lệnh xử lý biểu mẫu của bạn sau khi bạn tạo bài đăng (giả sử rằng bạn đang sử dụng wp_insert_post();), hãy giữ ID bài đăng trong một var mới:

$new_post = wp_insert_post($post_array);

và sau đó thêm:

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

và hình ảnh của bạn sẽ được tải lên và lưu dưới dạng hình thu nhỏ của bài đăng.


Cảm ơn bạn @Bai Internet. Tôi đã vật lộn để có được nó để chèn hình thu nhỏ, nhưng vì một số lý do khi tôi thay thế '$ new_post' bằng '$ pid', nó sẽ chèn hình thu nhỏ của bài đăng
Govnah Antwi-Boasiako

Tôi thật ngu ngốc. Tôi vừa xem lý do tại sao tôi phải sử dụng '$ pid' tôi đã có dòng này$pid = wp_insert_post($new_post);
Govnah Antwi-Boasiako

Vui mừng bạn đã làm việc đó ra, và tốt hơn là bạn có điểm.
Bai Internet

Đúng, cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. Bây giờ tôi đã hiểu nó, đã đến lúc thêm một số ajax :)
Govnah Antwi-Boasiako

1
Thật không may, tôi chỉ có một tài khoản trong Stackoverflow vì vậy tôi chỉ có thể cung cấp một tài khoản cho Câu hỏi này. Câu trả lời hoàn hảo.
hemnath mouli

1

Đánh dấu 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);
  }

 ?>

Đang tải hình ảnh:

<?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;
}
?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.