چون کسی پاسخ نداد خودم پاسخ میدم. راه حلش رو همون روز پیدا کردم ولی وقت نشد اینجا قرار بدم:
کدهای زیر توسط Ajax تصویر شاخص مربوط به یک پست رو آپلود میکنند:
Functions.php:
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 ); }}کدهای html و jquery و ajax که در صفحه دلخواه باید قراربگیره:
<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>کدهای php آپلود فایل که باید در صفحه دلخواه و در بالای همه کدها قرار بگیره:
//hook the Ajax call//for logged-in usersadd_action('wp_ajax_my_upload_action', 'my_ajax_upload');//for none logged-in usersadd_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();} این کدها رو همینطوری نباید کپی کنید کسانی که پلاگین نویسی وردپرس کار کرده باشند میدونند که باید چه تغییراتی ایجاد کنند و...