/
www
/
wwwroot
/
fxdst.com
/
wp-content
/
themes
/
fxdst
/
inc
/
Upload File
HOME
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } //图片上传 add_action('wp_ajax_nopriv_img_upload', 'io_img_upload'); add_action('wp_ajax_img_upload', 'io_img_upload'); function io_img_upload(){ $extArr = array("jpg", "png", "jpeg"); $file = $_FILES['files']; $upload_type = isset($_POST['upload_type']) ? sanitize_key(wp_unslash($_POST['upload_type'])) : ''; $max_upload_size = $upload_type === 'sites_screenshot' ? 512 * 1024 : 128 * 1024; if ( !empty( $file ) ) { if ( !empty( $file['size'] ) && (int) $file['size'] > $max_upload_size ) { if ( $upload_type === 'sites_screenshot' ) { echo '{"status":4,"msg":"\u4ea7\u54c1\u622a\u56fe\u5927\u5c0f\u4e0d\u80fd\u8d85\u8fc7 512KB\u3002"}'; exit(); } echo '{"status":4,"msg":"\u56fe\u7247\u5927\u5c0f\u4e0d\u80fd\u8d85\u8fc7 128KB\u3002"}'; exit(); } $basename = isset( $file['name'] ) ? $file['name'] : ''; $baseext = strtolower( pathinfo( $basename, PATHINFO_EXTENSION ) ); if ( ! in_array( $baseext, $extArr, true ) ) { echo '{"status":4,"msg":"'.__('图片格式不支持','i_theme').'"}'; exit(); } if ( empty( $file['tmp_name'] ) || ! is_uploaded_file( $file['tmp_name'] ) ) { echo '{"status":4,"msg":"'.__('图片上传失败!','i_theme').'"}'; exit(); } $imginfo = @getimagesize( $file['tmp_name'] ); if ( $imginfo === false ) { echo '{"status":4,"msg":"'.__('无效的图片文件','i_theme').'"}'; exit(); } $allowed_imagetypes = array( IMAGETYPE_JPEG, IMAGETYPE_PNG ); if ( ! in_array( $imginfo[2], $allowed_imagetypes, true ) ) { echo '{"status":4,"msg":"'.__('无效的图片文件','i_theme').'"}'; exit(); } $wp_upload_dir = wp_upload_dir(); // 获取上传目录信息 $dataname = date("YmdHis_").substr(md5(time()), 0, 8) . '.' . $baseext; $filename = $wp_upload_dir['path'] . '/' . $dataname; rename( $file['tmp_name'], $filename ); // 将上传的图片文件移动到上传目录 $attachment = array( 'guid' => $wp_upload_dir['url'] . '/' . $dataname, // 外部链接的 url 'post_mime_type' => $file['type'], // 文件 mime 类型 'post_title' => preg_replace( '/\.[^.]+$/', '', $basename ), // 附件标题,采用去除扩展名之后的文件名 'post_content' => '', // 文章内容,留空 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $filename ); // 插入附件信息 if($attach_id != 0){ require_once( ABSPATH . 'wp-admin/includes/image.php' ); // 确保包含此文件,因为wp_generate_attachment_metadata()依赖于此文件。 $attach_data = wp_generate_attachment_metadata( $attach_id, $filename ); wp_update_attachment_metadata( $attach_id, $attach_data ); // 生成附件的元数据,并更新数据库记录。 print_r(json_encode(array('status'=>1,'msg'=>__('图片添加成功','i_theme'),'data'=>array('id'=>$attach_id,'src'=>wp_get_attachment_url( $attach_id ),'title'=>$basename)))); exit(); }else{ echo '{"status":4,"msg":"'.__('图片上传失败!','i_theme').'"}'; exit(); } } } //删除图片 add_action('wp_ajax_nopriv_img_remove', 'io_img_remove'); add_action('wp_ajax_img_remove', 'io_img_remove'); function io_img_remove(){ $attach_id = $_POST["id"]; if( empty($attach_id) ){ echo '{"status":3,"msg":"'.__('没有上传图像!','i_theme').'"}'; exit; } if ( false === wp_delete_attachment( $attach_id ) ) echo '{"status":4,"msg":"'.sprintf(__('图片 %s 删除失败!','i_theme'), $attach_id).'"}'; else echo '{"status":1,"msg":"'.__('删除成功!','i_theme').'"}'; exit; } //提交文章 add_action('wp_ajax_nopriv_contribute_post', 'io_contribute'); add_action('wp_ajax_contribute_post', 'io_contribute'); if (!function_exists('fxdst_submit_normalize_domain')) { function fxdst_submit_normalize_domain($url) { $url = trim(html_entity_decode((string) $url, ENT_QUOTES, 'UTF-8')); if ($url === '') { return ''; } if (!preg_match('#^https?://#i', $url)) { $url = 'https://' . $url; } $parts = wp_parse_url($url); if (empty($parts['host'])) { return ''; } $host = strtolower(rtrim($parts['host'], '.')); if (strpos($host, 'www.') === 0) { $host = substr($host, 4); } return sanitize_text_field($host); } } if (!function_exists('fxdst_submit_domain_exists')) { function fxdst_submit_domain_exists($domain, $exclude_id = 0) { $domain = fxdst_submit_normalize_domain($domain); if ($domain === '') { return 0; } $direct = get_posts(array( 'post_type' => 'sites', 'post_status' => array('publish', 'pending', 'draft', 'private', 'future'), 'posts_per_page' => 1, 'fields' => 'ids', 'meta_key' => '_sites_domain', 'meta_value' => $domain, 'post__not_in' => $exclude_id ? array((int) $exclude_id) : array(), 'no_found_rows' => true, )); if (!empty($direct)) { return (int) $direct[0]; } $ids = get_posts(array( 'post_type' => 'sites', 'post_status' => array('publish', 'pending', 'draft', 'private', 'future'), 'posts_per_page' => -1, 'fields' => 'ids', 'meta_query' => array( array( 'key' => '_sites_link', 'compare' => 'EXISTS', ), ), 'post__not_in' => $exclude_id ? array((int) $exclude_id) : array(), 'no_found_rows' => true, )); foreach ($ids as $post_id) { if (fxdst_submit_normalize_domain(get_post_meta($post_id, '_sites_link', true)) === $domain) { return (int) $post_id; } } return 0; } } function io_contribute(){ $delay = 40; if( isset($_COOKIE["tougao"]) && ( time() - $_COOKIE["tougao"] ) < $delay ){ error('{"status":2,"msg":"'.sprintf(__('您投稿也太勤快了吧,%s秒后再试!','i_theme'), ($delay - ( time() - $_COOKIE["tougao"] )) ).'"}'); } //表单变量初始化 $sites_link = isset( $_POST['tougao_sites_link'] ) ? trim(htmlspecialchars($_POST['tougao_sites_link'], ENT_QUOTES)) : ''; $sites_sescribe = isset( $_POST['tougao_sites_sescribe'] ) ? trim(htmlspecialchars($_POST['tougao_sites_sescribe'], ENT_QUOTES)) : ''; $title = isset( $_POST['tougao_title'] ) ? trim(htmlspecialchars($_POST['tougao_title'], ENT_QUOTES)) : ''; $category = isset( $_POST['tougao_cat'] ) ? $_POST['tougao_cat'] : '0'; $sites_ico = isset( $_POST['tougao_sites_ico'] ) ? trim(htmlspecialchars($_POST['tougao_sites_ico'], ENT_QUOTES)) : ''; $sites_screenshot = isset( $_POST['tougao_sites_screenshot'] ) ? trim(htmlspecialchars($_POST['tougao_sites_screenshot'], ENT_QUOTES)) : ''; $price_mode = isset( $_POST['tougao_price_mode'] ) ? sanitize_key(wp_unslash($_POST['tougao_price_mode'])) : ''; $price_options = array( 'free' => "\u514d\u8d39", 'freemium' => "Freemium / \u514d\u8d39\u589e\u503c", 'paid_subscription' => "\u4ed8\u8d39\u8ba2\u9605", 'one_time' => "\u4e70\u65ad\u5236", 'open_source' => "\u5f00\u6e90\u514d\u8d39", 'contact_sales' => "\u8054\u7cfb\u9500\u552e / \u5b9a\u5236\u5b9a\u4ef7", 'unknown' => "\u6682\u4e0d\u786e\u5b9a", ); $content = isset( $_POST['tougao_content'] ) ? trim(htmlspecialchars($_POST['tougao_content'], ENT_QUOTES)) : ''; // 表单项数据验证 if ( $category == "0" ){ error('{"status":4,"msg":"'.__('请选择分类。','i_theme').'"}'); } if ( !empty(get_term_children($category, 'favorites'))){ error('{"status":4,"msg":"'.__('不能选用父级分类目录。','i_theme').'"}'); } if ( empty($sites_sescribe) || mb_strlen($sites_sescribe) > 50 ) { error('{"status":4,"msg":"'.__('网站描叙必须填写,且长度不得超过50字。','i_theme').'"}'); } if ( empty($sites_link) ){ error('{"status":3,"msg":"\u8bf7\u586b\u5199\u5b8c\u6574\u6709\u6548\u7684\u5b98\u7f51\u94fe\u63a5\u3002"}'); } elseif ( !empty($sites_link) && !preg_match('/http(s)?:\/\/[\w.]+[\w\/]*[\w.]*\??[\w=&\+\%]*/is', $sites_link)) { error('{"status":4,"msg":"'.__('网站链接必须符合URL格式。','i_theme').'"}'); } $submitted_domain = fxdst_submit_normalize_domain($sites_link); if ( empty($submitted_domain) ) { error('{"status":4,"msg":"\u8bf7\u586b\u5199\u5b8c\u6574\u6709\u6548\u7684\u5b98\u7f51\u94fe\u63a5\u3002"}'); } if ( fxdst_submit_domain_exists($submitted_domain) ) { error('{"status":3,"msg":"\u8be5\u57df\u540d\u5df2\u7ecf\u6536\u5f55\u6216\u6b63\u5728\u5ba1\u6838\u4e2d\uff0c\u8bf7\u4e0d\u8981\u91cd\u590d\u63d0\u4ea4\u3002"}'); } if ( empty($title) || mb_strlen($title) > 30 ) { error('{"status":4,"msg":"'.__('网站名称必须填写,且长度不得超过30字。','i_theme').'"}'); } //if ( empty($content) || mb_strlen($content) > 10000 || mb_strlen($content) < 6) { // error('{"status":4,"msg":"内容必须填写,且长度不得超过10000字,不得少于6字。"}'); //} $tougao = array( 'comment_status' => 'closed', 'ping_status' => 'closed', //'post_author' => 1,//用于投稿的用户ID 'post_title' => $title, 'post_content' => $content, 'post_status' => 'pending', 'post_type' => 'sites', //'tax_input' => array( 'favorites' => array($category) ) //游客不可用 ); // 将文章插入数据库 $status = wp_insert_post( $tougao ); if ($status != 0){ global $wpdb; add_post_meta($status, '_sites_sescribe', $sites_sescribe); add_post_meta($status, '_sites_link', $sites_link); add_post_meta($status, '_sites_domain', $submitted_domain); add_post_meta($status, '_sites_order', '0'); if( !empty($sites_ico)) add_post_meta($status, '_thumbnail', $sites_ico); if( !empty($sites_screenshot)) add_post_meta($status, '_sites_screenshot', $sites_screenshot); if( !empty($price_mode) && isset($price_options[$price_mode]) ){ add_post_meta($status, '_sites_price_mode', $price_mode); add_post_meta($status, '_sites_price', json_decode('"' . $price_options[$price_mode] . '"')); } wp_set_post_terms( $status, array($category), 'favorites'); //设置文章分类 setcookie("tougao", time(), time()+$delay+10); error('{"status":1,"msg":"'.__('投稿成功!','i_theme').'"}'); }else{ error('{"status":4,"msg":"'.__('投稿失败!','i_theme').'"}'); } } function error($ErrMsg) { echo $ErrMsg; exit; }