WordPress后台中实现图片上传功能的实例讲解


Posted in PHP onJanuary 11, 2016

图片上传

文件准备:新建php文件,我用默认主题Twenty Ten来测试,首先在这个主题的文件夹下新建一个文件-myfunctions.php   然后打开functions.php文件在最底部添加下面的代码载入我们新建的这个文件:

include_once('myfunctions.php');

类的代码如下:

<?php   
//类ClassicOptions  
class ClassicOptions {   
  /* -- getOptions函数获取选项组 -- */   
  function getOptions() {  
    // 在数据库中获取选项组   
    $options = get_option('classic_options');   
    // 如果数据库中不存在该选项组, 设定这些选项的默认值, 并将它们插入数据库   
    if (!is_array($options)) {   
      //初始默认数据  
      $options['ashu_copy_right'] = '阿树工作室';  
        
      //这里可添加更多设置选项  
        
      update_option('classic_options', $options);   
    }  
    // 返回选项组  
    return $options;  
  }  
  /* -- init函数 初始化 -- */   
  function init() {   
    // 如果是 POST 提交数据, 对数据进行限制, 并更新到数据库   
    if(isset($_POST['classic_save'])) {   
      // 获取选项组, 因为有可能只修改部分选项, 所以先整个拿下来再进行更改   
      $options = ClassicOptions::getOptions();   
      // 数据处理  
      $options['ashu_copy_right'] = stripslashes($_POST['ashu_copy_right']);   
        
      //在这追加其他选项的限制处理   
        
      // 更新数据   
      update_option('classic_options', $options);   
      
    } else {  
      // 否则, 重新获取选项组, 也就是对数据进行初始化  
      ClassicOptions::getOptions();   
    }  
      
    //添加设置页面  
    add_theme_page("主题设置", "主题设置", 'edit_themes', basename(__FILE__), array('ClassicOptions', 'display'));   
  }   
  /* -- 标签页 -- */   
  function display() {   
    $options = ClassicOptions::getOptions(); ?>   
    <form method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">   
    <div class="wrap">   
    <h2><?php _e('阿树工作室主题设置', 'classic'); ?></h2>   
    <!-- 设置内容 -->   
    <table class="form-table">   
      <tbody>   
        <tr valign="top">   
          <td>  
            <label>   
              <input type="text" name="ashu_copy_right" value="<?php echo($options['ashu_copy_right']); ?>" size="20"/><?php _e('阿树工作室版权文字');?>   
            </label>   
          </td>   
        </tr>   
      </tbody>   
    </table>   
    <!-- TODO: 在这里追加其他选项内容 -->   
    <p class="submit">   
      <input type="submit" name="classic_save" value="<?php _e('保存设置'); ?>" />   
    </p>   
  </div>   
</form>   
<?php   
  }   
}  
  
/*初始化,执行ClassicOptions类的init函数*/   
add_action('admin_menu', array('ClassicOptions', 'init'));    
?>

之后查看我们的后台设置页面,看一下我添加之后的效果图:

WordPress后台中实现图片上传功能的实例讲解

此时文本域和上传按钮已经有了,但是点击还是没有任何效果。为了点击后弹出那个上传框架,我们还需要添加js代码。

为了便于管理,我们新建一个js文件,在twentyten主题文件夹下新建一个文件夹js然后,在这个文件加下新建一个upload.js文件。添加js代码:

jQuery(document).ready(function() {  
  //upbottom为上传按钮的id  
  jQuery('#upbottom').click(function() {  
    //ashu_logo为文本域  
     targetfield = jQuery(this).prev('#ashu_logo');  
     tb_show('', 'media-upload.php?type=image&TB_iframe=true');  
     return false;  
  });  
  
  window.send_to_editor = function(html) {  
     imgurl = jQuery('img',html).attr('src');  
     jQuery(targetfield).val(imgurl);  
     tb_remove();  
  }  
  
});

下面就是加载js和css了。
在上面的类中display()函数中添加以下代码:

//加载upload.js文件  
    wp_enqueue_script('my-upload', get_bloginfo( 'stylesheet_directory' ) . '/js/upload.js');  
    //加载上传图片的js(wp自带)  
    wp_enqueue_script('thickbox');  
    //加载css(wp自带)  
    wp_enqueue_style('thickbox');

之后如果你查看后台设置页面的源码,在源码的大概最后面位置能看到你加载的这个js文件。

好了,可以去试用了:

WordPress后台中实现图片上传功能的实例讲解

多个图片上传表单
首先我们修改表单,添加多个上传按钮,还加上显示图片用的div容器。
上面教程中的js代码中是通过文本域的id值来获取元素的,如果有多个文件上传表单,但是在一个html文档中id不能相同,那样的话,就得针对每个表单都写一个js,这样很繁琐,所以今天我们修改一下表单,并且将js改成通过class获取对象。

将类中的display()函数修改为(我新加了一个ashu_ico项,并且将上传按钮的id属性去掉改成class="ashu_bottom"):

function display() {  
    //加载upload.js文件  
    wp_enqueue_script('my-upload', get_bloginfo( 'stylesheet_directory' ) . '/js/upload.js');  
    //加载上传图片的js(wp自带)  
    wp_enqueue_script('thickbox');  
    //加载css(wp自带)  
    wp_enqueue_style('thickbox');  
    $options = ClassicOptions::getOptions(); ?>     
    <form method="post" enctype="multipart/form-data" name="classic_form" id="classic_form">     
    <div class="wrap">     
    <h2><?php _e('阿树工作室主题设置'); ?></h2>  
    <p>  
    <label>  
      <input type="text" size="80" name="ashu_logo" id="ashu_logo" value="<?php echo($options['ashu_logo']); ?>"/>  
      <input type="button" value="上传" class="ashu_bottom"/>  
    </label>  
    </p>  
    <p>  
    <label>  
      <input type="text" size="80" name="ashu_ico" id="ashu_ico" value="<?php echo($options['ashu_ico']); ?>"/>  
      <input type="button" value="上传" class="ashu_bottom"/>  
    </label>  
    </p>      
    <p class="submit">  
      <input type="submit" name="classic_save" value="<?php _e('保存设置'); ?>" />     
    </p>     
  </div>     
</form>     
<?php     
  }

这里新加了一个设置项,前面默认数据设置、数据更新都需要相应的增加项目,很简单,这里不赘述。

且看新的js代码,用编辑器打开我们的upload.js,修改代码为:

jQuery(document).ready(function() {  
  //查找class为ashu_bottom的对象  
  jQuery('input.ashu_bottom').click(function() {  
    //获取它前面的一个兄弟元素  
     targetfield = jQuery(this).prev('input');  
     tb_show('', 'media-upload.php?type=image&TB_iframe=true');  
     return false;  
  });  
  
  window.send_to_editor = function(html) {  
     imgurl = jQuery('img',html).attr('src');  
     jQuery(targetfield).val(imgurl);  
     tb_remove();  
  }  
  
});

到此多个图片上传已经实现,其实也很简单。。

WordPress后台中实现图片上传功能的实例讲解

PHP 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
动态生成gif格式的图像要注意?
Oct 09 PHP
php 中include()与require()的对比
Oct 09 PHP
php设计模式 Adapter(适配器模式)
Jun 26 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
Apr 09 PHP
Session的工作机制详解和安全性问题(PHP实例讲解)
Apr 10 PHP
PH P5.2至5.5、5.6的新增功能详解
Jul 14 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
php控制文件下载速度的方法
Mar 24 PHP
PHP 自动加载的简单实现(推荐)
Aug 12 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 #PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 #PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 #PHP
详解YII关联查询
Jan 10 #PHP
PHP 设计模式系列之 specification规格模式
Jan 10 #PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 #PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
Jan 09 #PHP
You might like
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
仿淘宝JSsearch搜索下拉深度用法
2018/01/15 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
2020/11/09 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python3使用pandas模块读写excel操作示例
2018/07/03 Python
python实现控制台打印的方法
2019/01/12 Python
Python netmiko模块的使用
2020/02/14 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
美国婴儿用品及配件购买网站:Munchkin
2019/04/03 全球购物
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
信息员培训方案
2014/06/12 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
蜗居观后感
2015/06/11 职场文书
redis三种高可用方式部署的实现
2021/05/11 Redis
小程序实现筛子抽奖
2021/05/26 Javascript
详解Java实现数据结构之并查集
2021/06/23 Java/Android
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
Linux中各个目录的作用与内容
2022/06/28 Servers