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 相关文章推荐
转换中文日期的PHP程序
Oct 09 PHP
利用discuz实现PHP大文件上传应用实例代码
Nov 14 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
php实现mysql数据库操作类分享
Feb 14 PHP
php学习笔记之基础知识
Nov 08 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
Nov 25 PHP
使用Appcan客户端自动更新PHP版本号(全)
Jul 31 PHP
php实现多城市切换特效
Aug 09 PHP
PHP常见加密函数用法示例【crypt与md5】
Jan 27 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 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
php记录代码执行时间(实现代码)
2013/07/05 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
thinkPHP5框架设置404、403等http状态页面的方法
2018/06/05 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
如何用javascript控制上传文件的大小
2006/10/26 Javascript
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
浅谈Vue.js 组件中的v-on绑定自定义事件理解
2017/11/17 Javascript
vue组件实现进度条效果
2018/06/06 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
vue cli4.0项目引入typescript的方法
2020/07/17 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
Python递归遍历列表及输出的实现方法
2015/05/19 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
python datetime中strptime用法详解
2019/08/29 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
一个基于canvas的移动端图片编辑器的实现
2020/10/28 HTML / CSS
戴尔英国官网:Dell英国
2017/05/27 全球购物
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
设计部经理的岗位职责
2013/11/16 职场文书
业务副厂长岗位职责
2014/01/03 职场文书
食堂个人先进事迹
2014/01/22 职场文书
医院保洁服务方案
2014/06/11 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
基于Python实现nc批量转tif格式
2022/08/14 Python