WordPress后台中实现图片上传功能的实例讲解
<p><strong>图片上传</strong></p>
<p>
文件准备:新建php文件,我用默认主题Twenty Ten来测试,首先在这个主题的文件夹下新建一个文件-myfunctions.php 然后打开functions.php文件在最底部添加下面的代码载入我们新建的这个文件:</p>
<div>
<div>
<div id="highlighter_574064">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
</td>
<td>
<div>
<div>
<code>include_once</code><code>(</code><code>'myfunctions.php'</code><code>); </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
类的代码如下:</p>
<div>
<div>
<div id="highlighter_313823">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
<div>
30</div>
<div>
31</div>
<div>
32</div>
<div>
33</div>
<div>
34</div>
<div>
35</div>
<div>
36</div>
<div>
37</div>
<div>
38</div>
<div>
39</div>
<div>
40</div>
<div>
41</div>
<div>
42</div>
<div>
43</div>
<div>
44</div>
<div>
45</div>
<div>
46</div>
<div>
47</div>
<div>
48</div>
<div>
49</div>
<div>
50</div>
<div>
51</div>
<div>
52</div>
<div>
53</div>
<div>
54</div>
<div>
55</div>
<div>
56</div>
<div>
57</div>
<div>
58</div>
<div>
59</div>
<div>
60</div>
<div>
61</div>
<div>
62</div>
<div>
63</div>
<div>
64</div>
<div>
65</div>
<div>
66</div>
<div>
67</div>
<div>
68</div>
<div>
69</div>
<div>
70</div>
<div>
71</div>
<div>
72</div>
</td>
<td>
<div>
<div>
<code><?php </code>
</div>
<div>
<code>//类ClassicOptions </code>
</div>
<div>
<code>class</code> <code>ClassicOptions { </code>
</div>
<div>
<code> </code><code>/* -- getOptions函数获取选项组 -- */</code> </div>
<div>
<code> </code><code>function</code> <code>getOptions() { </code>
</div>
<div>
<code> </code><code>// 在数据库中获取选项组 </code>
</div>
<div>
<code> </code><code>$options</code> <code>= get_option(</code><code>'classic_options'</code><code>); </code>
</div>
<div>
<code> </code><code>// 如果数据库中不存在该选项组, 设定这些选项的默认值, 并将它们插入数据库 </code>
</div>
<div>
<code> </code><code>if</code> <code>(!</code><code>is_array</code><code>(</code><code>$options</code><code>)) { </code>
</div>
<div>
<code> </code><code>//初始默认数据 </code>
</div>
<div>
<code> </code><code>$options</code><code>[</code><code>'ashu_copy_right'</code><code>] = </code><code>'阿树工作室'</code><code>; </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>//这里可添加更多设置选项 </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>update_option(</code><code>'classic_options'</code><code>, </code><code>$options</code><code>); </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code> </code><code>// 返回选项组 </code>
</div>
<div>
<code> </code><code>return</code> <code>$options</code><code>; </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code> </code><code>/* -- init函数 初始化 -- */</code> </div>
<div>
<code> </code><code>function</code> <code>init() { </code>
</div>
<div>
<code> </code><code>// 如果是 POST 提交数据, 对数据进行限制, 并更新到数据库 </code>
</div>
<div>
<code> </code><code>if</code><code>(isset(</code><code>$_POST</code><code>[</code><code>'classic_save'</code><code>])) { </code>
</div>
<div>
<code> </code><code>// 获取选项组, 因为有可能只修改部分选项, 所以先整个拿下来再进行更改 </code>
</div>
<div>
<code> </code><code>$options</code> <code>= ClassicOptions::getOptions(); </code>
</div>
<div>
<code> </code><code>// 数据处理 </code>
</div>
<div>
<code> </code><code>$options</code><code>[</code><code>'ashu_copy_right'</code><code>] = </code><code>stripslashes</code><code>(</code><code>$_POST</code><code>[</code><code>'ashu_copy_right'</code><code>]); </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>//在这追加其他选项的限制处理 </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>// 更新数据 </code>
</div>
<div>
<code> </code><code>update_option(</code><code>'classic_options'</code><code>, </code><code>$options</code><code>); </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>} </code><code>else</code> <code>{ </code>
</div>
<div>
<code> </code><code>// 否则, 重新获取选项组, 也就是对数据进行初始化 </code>
</div>
<div>
<code> </code><code>ClassicOptions::getOptions(); </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>//添加设置页面 </code>
</div>
<div>
<code> </code><code>add_theme_page(</code><code>"主题设置"</code><code>, </code><code>"主题设置"</code><code>, </code><code>'edit_themes'</code><code>, </code><code>basename</code><code>(</code><code>__FILE__</code><code>), </code><code>array</code><code>(</code><code>'ClassicOptions'</code><code>, </code><code>'display'</code><code>)); </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code> </code><code>/* -- 标签页 -- */</code> </div>
<div>
<code> </code><code>function</code> <code>display() { </code>
</div>
<div>
<code> </code><code>$options</code> <code>= ClassicOptions::getOptions(); ?> </code>
</div>
<div>
<code> </code><code><form method=</code><code>"post"</code> <code>enctype=</code><code>"multipart/form-data"</code> <code>name=</code><code>"classic_form"</code> <code>id=</code><code>"classic_form"</code><code>> </code>
</div>
<div>
<code> </code><code><div </code><code>class</code><code>=</code><code>"wrap"</code><code>> </code>
</div>
<div>
<code> </code><code><h2><?php _e(</code><code>'阿树工作室主题设置'</code><code>, </code><code>'classic'</code><code>); ?></h2> </code>
</div>
<div>
<code> </code><code><!-- 设置内容 --> </code>
</div>
<div>
<code> </code><code><table </code><code>class</code><code>=</code><code>"form-table"</code><code>> </code>
</div>
<div>
<code> </code><code><tbody> </code>
</div>
<div>
<code> </code><code><tr valign=</code><code>"top"</code><code>> </code>
</div>
<div>
<code> </code><code><td> </code>
</div>
<div>
<code> </code><code><label> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"text"</code> <code>name=</code><code>"ashu_copy_right"</code> <code>value=</code><code>"<?php echo($options['ashu_copy_right']); ?>"</code> <code>size=</code><code>"20"</code><code>/><?php _e(</code><code>'阿树工作室版权文字'</code><code>);?> </code>
</div>
<div>
<code> </code><code></label> </code>
</div>
<div>
<code> </code><code></td> </code>
</div>
<div>
<code> </code><code></tr> </code>
</div>
<div>
<code> </code><code></tbody> </code>
</div>
<div>
<code> </code><code></table> </code>
</div>
<div>
<code> </code><code><!-- TODO: 在这里追加其他选项内容 --> </code>
</div>
<div>
<code> </code><code><p </code><code>class</code><code>=</code><code>"submit"</code><code>> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"submit"</code> <code>name=</code><code>"classic_save"</code> <code>value=</code><code>"<?php _e('保存设置'); ?>"</code> <code>/> </code>
</div>
<div>
<code> </code><code></p> </code>
</div>
<div>
<code> </code><code></div> </code>
</div>
<div>
<code></form> </code>
</div>
<div>
<code><?php </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code>} </code>
</div>
<div>
<code> </code>
</div>
<div>
<code>/*初始化,执行ClassicOptions类的init函数*/</code> </div>
<div>
<code>add_action(</code><code>'admin_menu'</code><code>, </code><code>array</code><code>(</code><code>'ClassicOptions'</code><code>, </code><code>'init'</code><code>)); </code>
</div>
<div>
<code>?> </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
之后查看我们的后台设置页面,看一下我添加之后的效果图:</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress后台中实现图片上传功能的实例讲解" alt="WordPress后台中实现图片上传功能的实例讲解" src="https://zhuji.jb51.net/uploads/img/202305/ab0af2e1667a1b122935e9dd60cb657c.jpg"></p>
<p>
此时文本域和上传按钮已经有了,但是点击还是没有任何效果。为了点击后弹出那个上传框架,我们还需要添加js代码。</p>
<p>
为了便于管理,我们新建一个js文件,在twentyten主题文件夹下新建一个文件夹js然后,在这个文件加下新建一个upload.js文件。添加js代码:</p>
<div>
<div>
<div>
<div id="highlighter_668506">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
</td>
<td>
<div>
<div>
<code>jQuery(document).ready(</code><code>function</code><code>() { </code>
</div>
<div>
<code> </code><code>//upbottom为上传按钮的id </code>
</div>
<div>
<code> </code><code>jQuery(</code><code>'#upbottom'</code><code>).click(</code><code>function</code><code>() { </code>
</div>
<div>
<code> </code><code>//ashu_logo为文本域 </code>
</div>
<div>
<code> </code><code>targetfield = jQuery(</code><code>this</code><code>).prev(</code><code>'#ashu_logo'</code><code>); </code>
</div>
<div>
<code> </code><code>tb_show(</code><code>''</code><code>, </code><code>'media-upload.php?type=image&amp;TB_iframe=true'</code><code>); </code>
</div>
<div>
<code> </code><code>return</code> <code>false</code><code>; </code>
</div>
<div>
<code> </code><code>}); </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>window.send_to_editor = </code><code>function</code><code>(html) { </code>
</div>
<div>
<code> </code><code>imgurl = jQuery(</code><code>'img'</code><code>,html).attr(</code><code>'src'</code><code>); </code>
</div>
<div>
<code> </code><code>jQuery(targetfield).val(imgurl); </code>
</div>
<div>
<code> </code><code>tb_remove(); </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code> </code>
</div>
<div>
<code>});</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
下面就是加载js和css了。<br>
在上面的类中display()函数中添加以下代码:</p>
<div>
<div>
<div id="highlighter_957641">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
</td>
<td>
<div>
<div>
<code>//加载upload.js文件 </code>
</div>
<div>
<code> </code><code>wp_enqueue_script(</code><code>'my-upload'</code><code>, get_bloginfo( </code><code>'stylesheet_directory'</code> <code>) . </code><code>'/js/upload.js'</code><code>); </code>
</div>
<div>
<code> </code><code>//加载上传图片的js(wp自带) </code>
</div>
<div>
<code> </code><code>wp_enqueue_script(</code><code>'thickbox'</code><code>); </code>
</div>
<div>
<code> </code><code>//加载css(wp自带) </code>
</div>
<div>
<code> </code><code>wp_enqueue_style(</code><code>'thickbox'</code><code>); </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
之后如果你查看后台设置页面的源码,在源码的大概最后面位置能看到你加载的这个js文件。</p>
<p>
好了,可以去试用了:</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress后台中实现图片上传功能的实例讲解" alt="WordPress后台中实现图片上传功能的实例讲解" src="https://zhuji.jb51.net/uploads/img/202305/73e822f82663c8b86bc6e8849f173ebe.jpg"></p>
<p>
</p>
<p>
<strong>多个图片上传表单</strong><br>
首先我们修改表单,添加多个上传按钮,还加上显示图片用的div容器。<br>
上面教程中的js代码中是通过文本域的id值来获取元素的,如果有多个文件上传表单,但是在一个html文档中id不能相同,那样的话,就得针对每个表单都写一个js,这样很繁琐,所以今天我们修改一下表单,并且将js改成通过class获取对象。</p>
<p>
将类中的display()函数修改为(我新加了一个ashu_ico项,并且将上传按钮的id属性去掉改成):</p>
<div>
<div>
<div id="highlighter_458289">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
<div>
17</div>
<div>
18</div>
<div>
19</div>
<div>
20</div>
<div>
21</div>
<div>
22</div>
<div>
23</div>
<div>
24</div>
<div>
25</div>
<div>
26</div>
<div>
27</div>
<div>
28</div>
<div>
29</div>
<div>
30</div>
</td>
<td>
<div>
<div>
<code>function</code> <code>display() { </code>
</div>
<div>
<code> </code><code>//加载upload.js文件 </code>
</div>
<div>
<code> </code><code>wp_enqueue_script(</code><code>'my-upload'</code><code>, get_bloginfo( </code><code>'stylesheet_directory'</code> <code>) . </code><code>'/js/upload.js'</code><code>); </code>
</div>
<div>
<code> </code><code>//加载上传图片的js(wp自带) </code>
</div>
<div>
<code> </code><code>wp_enqueue_script(</code><code>'thickbox'</code><code>); </code>
</div>
<div>
<code> </code><code>//加载css(wp自带) </code>
</div>
<div>
<code> </code><code>wp_enqueue_style(</code><code>'thickbox'</code><code>); </code>
</div>
<div>
<code> </code><code>$options</code> <code>= ClassicOptions::getOptions(); ?> </code>
</div>
<div>
<code> </code><code><form method=</code><code>"post"</code> <code>enctype=</code><code>"multipart/form-data"</code> <code>name=</code><code>"classic_form"</code> <code>id=</code><code>"classic_form"</code><code>> </code>
</div>
<div>
<code> </code><code><div </code><code>class</code><code>=</code><code>"wrap"</code><code>> </code>
</div>
<div>
<code> </code><code><h2><?php _e(</code><code>'阿树工作室主题设置'</code><code>); ?></h2> </code>
</div>
<div>
<code> </code><code><p> </code>
</div>
<div>
<code> </code><code><label> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"text"</code> <code>size=</code><code>"80"</code> <code>name=</code><code>"ashu_logo"</code> <code>id=</code><code>"ashu_logo"</code> <code>value=</code><code>"<?php echo($options['ashu_logo']); ?>"</code><code>/> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"button"</code> <code>value=</code><code>"上传"</code> <code>class</code><code>=</code><code>"ashu_bottom"</code><code>/> </code>
</div>
<div>
<code> </code><code></label> </code>
</div>
<div>
<code> </code><code></p> </code>
</div>
<div>
<code> </code><code><p> </code>
</div>
<div>
<code> </code><code><label> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"text"</code> <code>size=</code><code>"80"</code> <code>name=</code><code>"ashu_ico"</code> <code>id=</code><code>"ashu_ico"</code> <code>value=</code><code>"<?php echo($options['ashu_ico']); ?>"</code><code>/> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"button"</code> <code>value=</code><code>"上传"</code> <code>class</code><code>=</code><code>"ashu_bottom"</code><code>/> </code>
</div>
<div>
<code> </code><code></label> </code>
</div>
<div>
<code> </code><code></p> </code>
</div>
<div>
<code> </code><code><p </code><code>class</code><code>=</code><code>"submit"</code><code>> </code>
</div>
<div>
<code> </code><code><input type=</code><code>"submit"</code> <code>name=</code><code>"classic_save"</code> <code>value=</code><code>"<?php _e('保存设置'); ?>"</code> <code>/> </code>
</div>
<div>
<code> </code><code></p> </code>
</div>
<div>
<code> </code><code></div> </code>
</div>
<div>
<code></form> </code>
</div>
<div>
<code><?php </code>
</div>
<div>
<code> </code><code>} </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
这里新加了一个设置项,前面默认数据设置、数据更新都需要相应的增加项目,很简单,这里不赘述。</p>
<p>
且看新的js代码,用编辑器打开我们的upload.js,修改代码为:</p>
<div>
<div>
<div id="highlighter_564373">
<div>
<span>?</span>
</div>
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td>
<div>
1</div>
<div>
2</div>
<div>
3</div>
<div>
4</div>
<div>
5</div>
<div>
6</div>
<div>
7</div>
<div>
8</div>
<div>
9</div>
<div>
10</div>
<div>
11</div>
<div>
12</div>
<div>
13</div>
<div>
14</div>
<div>
15</div>
<div>
16</div>
</td>
<td>
<div>
<div>
<code>jQuery(document).ready(</code><code>function</code><code>() { </code>
</div>
<div>
<code> </code><code>//查找class为ashu_bottom的对象 </code>
</div>
<div>
<code> </code><code>jQuery(</code><code>'input.ashu_bottom'</code><code>).click(</code><code>function</code><code>() { </code>
</div>
<div>
<code> </code><code>//获取它前面的一个兄弟元素 </code>
</div>
<div>
<code> </code><code>targetfield = jQuery(</code><code>this</code><code>).prev(</code><code>'input'</code><code>); </code>
</div>
<div>
<code> </code><code>tb_show(</code><code>''</code><code>, </code><code>'media-upload.php?type=image&amp;TB_iframe=true'</code><code>); </code>
</div>
<div>
<code> </code><code>return</code> <code>false</code><code>; </code>
</div>
<div>
<code> </code><code>}); </code>
</div>
<div>
<code> </code>
</div>
<div>
<code> </code><code>window.send_to_editor = </code><code>function</code><code>(html) { </code>
</div>
<div>
<code> </code><code>imgurl = jQuery(</code><code>'img'</code><code>,html).attr(</code><code>'src'</code><code>); </code>
</div>
<div>
<code> </code><code>jQuery(targetfield).val(imgurl); </code>
</div>
<div>
<code> </code><code>tb_remove(); </code>
</div>
<div>
<code> </code><code>} </code>
</div>
<div>
<code> </code>
</div>
<div>
<code>}); </code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
<div id="codetool">
<div>
<textarea></textarea>
</div>
</div>
</div>
<p>
到此多个图片上传已经实现,其实也很简单。。</p>
<p>
<img style="max-width:100%!important;height:auto!important;"title="WordPress后台中实现图片上传功能的实例讲解" alt="WordPress后台中实现图片上传功能的实例讲解" src="https://zhuji.jb51.net/uploads/img/202305/d350e3f22b58c2bd7bb3cf33cd68ceeb.jpg"></p>
頁:
[1]