Ön uçtan yayın küçük resmi yükle


9

Kullanıcıların yayınları düzenlerken yayın küçük resmini yükleyebilmelerini istiyoruz. Bu nasıl halledilebilir. Wordpress'in ajax fonksiyonlarından faydalanacağını düşünürdüm.

Herhangi bir fikir,

harika

Yanıtlar:


25

Ajax'a dosya yüklemek biraz zor çünkü tarayıcının XMLHttpRequest nesnesini kullanarak dosya yüklemek mümkün değil, bu yüzden bir çeşit Ajax yükleme eklentisi kullanmanız gerekiyor ve en kolayı JQuery Form Eklentisi olacak ve bu da işleri daha kolay hale getiriyor. WordPress'e dahil edilmiştir. Bu yüzden kullanmak için onu sıkmanız gerekir:

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

bu sayfaya örneğin JQuery Form eklentisini aramak için yükleme formunuzu ve JQuery'yi ekleyin:

<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>

POSTID değerini gerçek posta kimliğiyle güncellemelisiniz. ardından dosya yüklemesini kabul etmek ve gönderi küçük resmini güncellemek için Ajax işlevini oluşturun

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

Bu yardımcı olur umarım


Bu harika. Sadece birkaç soru. Yani, her şeyin nereye gitmesi gerekiyor. Açıkçası, form söz konusu sayfaya gider ve bu, kullanılacak yazı kimliği olacaktır. İlk ekleme eylemi HEAD alanı veya function.php için. ve // ​​ile başlayan son ajax bloğu ajax çağrısını bağlar. Bu parça nereye gidiyor. Çok teşekkürler.
Robin I Knight

kodun ilk ve son snippet'leri işlevlerinizde herhangi bir yere yerleştirilebilir. php ve ikinci snippet'in yükleme formunuzu görüntülemek istediğiniz sayfaya yerleştirilmesi gerekir, ayrıca işleri kolaylaştırmak için ikinci snippet'i bir kısa koda çevirebilirsiniz .
Bainternet

Bu konuda ne alamadım formu nasıl my_ajax_upload () kullanmayı biliyor mu? Ajax çağrısına dahil edilmemeli mi? Bunu soruyorum çünkü düzenlenmesine izin verdiğim bir mesaj döngüsüne sahibim ve belirli yayınları işlemek için farklı işlevlere ihtiyaçları var.
Pollux Khafra

Form, eylem değeri işlev için hooked ( add_action(...) olduğundan my_ajax_upload kullanmayı bilir my_ajax_upload.
Bainternet

WP'de son zamanlarda bu işlevselliği etkileyecek bir şey değişti mi? Nedense hiçbir var $_POSTben vardığımızda verileri my_ajax_uploadJS geri arama rağmen param beklediğim her şeyi içerir. showRequestformData
drzaus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.