Tải lên hình thu nhỏ bài đăng từ giao diện người dùng


9

Chúng tôi muốn người dùng có thể tải lên hình thu nhỏ của bài đăng khi chỉnh sửa bài đăng. Làm thế nào điều này sẽ được thực hiện. Tôi sẽ tưởng tượng nó sẽ sử dụng các chức năng ajax của wordpress.

Bất kỳ ý tưởng,

Kỳ diệu

Câu trả lời:


25

Tải lên các tệp trong ajax hơi khó khăn vì không thể tải lên các tệp bằng đối tượng XMLHttpRequest của trình duyệt, do đó bạn cần sử dụng một số loại plugin tải lên Ajax và cách dễ nhất là Trình cắm biểu mẫu JQuery giúp mọi việc dễ dàng hơn và đó là Bao gồm trong WordPress. Vì vậy, để sử dụng nó, bạn cần phải ghi lại nó:

add_action('wp_print_scripts','include_jquery_form_plugin');
function include_jquery_form_plugin(){
    if (is_page('12')){ // only add this on the page that allows the upload
        wp_enqueue_script( 'jquery' );
        wp_enqueue_script( 'jquery-form',array('jquery'),false,true ); 
    }
}

trên trang đó thêm biểu mẫu tải lên của bạn và JQuery để gọi trình cắm JQuery Form chẳng hạn:

<form id="thumbnail_upload" method="post" action="#" enctype="multipart/form-data" >
  <input type="file" name="thumbnail" id="thumbnail">
  <input type='hidden' value='<?php wp_create_nonce( 'upload_thumb' ); ?>' name='_nonce' />
  <input type="hidden" name="post_id" id="post_id" value="POSTID">
  <input type="hidden" name="action" id="action" value="my_upload_action">
  <input id="submit-ajax" name="submit-ajax" type="submit" value="upload">
<form>
<div id="output1"></div>
<script>
$(document).ready(function() { 
    var options = { 
        target:        '#output1',      // target element(s) to be updated with server response 
        beforeSubmit:  showRequest,     // pre-submit callback 
        success:       showResponse,    // post-submit callback 
        url:    ajaxurl                 // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php     
    }; 

    // bind form using 'ajaxForm' 
    $('#thumbnail_upload').ajaxForm(options); 
});
function showRequest(formData, jqForm, options) {
//do extra stuff before submit like disable the submit button
$('#output1').html('Sending...');
$('#submit-ajax').attr("disabled", "disabled");
}
function showResponse(responseText, statusText, xhr, $form)  {
//do extra stuff after submit
}
</script>

bạn phải cập nhật POSTID với ID bài thực tế. sau đó tạo hàm Ajax để chấp nhận tải lên tệp và cập nhật hình thu nhỏ của bài đăng

//hook the Ajax call
//for logged-in users
add_action('wp_ajax_my_upload_action', 'my_ajax_upload');
//for none logged-in users
add_action('wp_ajax_nopriv_my_upload_action', 'my_ajax_upload');

function my_ajax_upload(){
//simple Security check
    check_ajax_referer('upload_thumb');

//get POST data
    $post_id = $_POST['post_id'];

//require the needed files
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');
//then loop over the files that were sent and store them using  media_handle_upload();
    if ($_FILES) {
        foreach ($_FILES as $file => $array) {
            if ($_FILES[$file]['error'] !== UPLOAD_ERR_OK) {
                echo "upload error : " . $_FILES[$file]['error'];
                die();
            }
            $attach_id = media_handle_upload( $file, $post_id );
        }   
    }
//and if you want to set that image as Post  then use:
  update_post_meta($post_id,'_thumbnail_id',$attach_id);
  echo "uploaded the new Thumbnail";
  die();
} 

hi vọng điêu nay co ich


Điều này thật tuyệt vời. Chỉ cần một vài truy vấn. Đó là, mọi thứ cần phải đi đâu. Rõ ràng là hình thức đi trên trang được đề cập và đó sẽ là id bài đăng để sử dụng. Hành động thêm đầu tiên là cho khu vực CHÍNH hoặc cho các hàm.php. và khối ajax cuối cùng bắt đầu bằng // hook lệnh gọi ajax. Bit đó đi đâu Cảm ơn nhiều.
Hiệp sĩ Robin I

đoạn mã đầu tiên và đoạn cuối có thể được đặt ở bất cứ đâu trong hàm của bạn.php và đoạn mã thứ hai cần được đặt trên trang bạn muốn hiển thị biểu mẫu tải lên của mình, bạn cũng chuyển đoạn mã thứ hai thành một mã ngắn để dễ dàng hơn .
Bai Internet

Điều tôi không nhận được về điều này là làm thế nào để biểu mẫu biết sử dụng my_ajax_upload ()? Không nên được bao gồm trong cuộc gọi ajax? Tôi hỏi điều này bởi vì tôi có một vòng các bài đăng mà tôi cho phép chỉnh sửa và chúng cần các chức năng khác nhau để xử lý các bài đăng nhất định.
Pollux Khafra

Biểu mẫu biết sử dụng my_ajax_upload vì giá trị hành động của nó được nối ( add_action(...) để my_ajax_uploadhoạt động.
BaiNET

Có bất cứ điều gì thay đổi gần đây trong WP sẽ ảnh hưởng đến chức năng này? Vì một số lý do, tôi không có $_POSTdữ liệu vào thời điểm tôi nhận được my_ajax_upload, mặc dù trong cuộc gọi lại JS showRequest, formDataparam chứa mọi thứ tôi mong đợi.
drzaus
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.