轩总 發表於 2023-7-24 00:00:00

WordPress中卸载插件以及移除文章类型组件的代码示例

<p>
<strong>插件卸载</strong><br>
在开发插件的过程中,免不了在数据库创建一些字段乃至表,或者创建了一些定时任务,当插件被删除的时候这些东西就会被留在 WordPress 上,变成垃圾,作为负责的开发者,有必要在删除插件的时候帮助用户删除掉我们留下的痕迹。</p>
<p>
uninstall.php 文件</p>
<p>
做到这点有两种方法,一时在插件的根目录创建一个 uninstall.php 文件,在你的插件被删除之前会调用执行这个文件,但要注意就是防止有人恶意访问这个文件我们需要判断一下 WP_UNINSTALL_PLUGIN 常量是否被定义,没定义则结束程序:</p>
<div>
<div>
<div id="highlighter_66363">
<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>
</td>
<td>
<div>
<div>
<code>&lt;?php</code>
</div>
<div>
<code>//防止有人恶意访问此文件,所以在没有 WP_UNINSTALL_PLUGIN 常量的情况下结束程序</code>
</div>
<div>
<code>if</code><code>( !defined( </code><code>'WP_UNINSTALL_PLUGIN'</code> <code>) ) </code><code>exit</code><code>();</code>
</div>
<div>
<code> </code>
</div>
<div>
<code>//可以在要卸载的时候做一些事情,比如删除一些字段,注销定时任务</code>
</div>
<div>
<code>delete_option( </code><code>'endskin_name'</code> <code>);</code>
</div>
<div>
<code>delete_option( </code><code>'endskin_name2'</code> <code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
卸载钩子</p>
<p>
第二种方法叫做卸载钩子,在你的根目录没有 uninstall.php 文件的时候 WordPress 会去执行卸载钩子。</p>
<p>
例子:</p>
<div>
<div>
<div id="highlighter_16289">
<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>register_uninstall_hook( </code><code>__FILE__</code><code>, </code><code>'Bing_uninstall_func'</code> <code>);</code>
</div>
<div>
<code>function</code> <code>Bing_uninstall_func(){</code>
</div>
<div>
<code>  </code><code>//可以在要卸载的时候做一些事情,比如删除一些字段,注销定时任务</code>
</div>
<div>
<code>  </code><code>delete_option( </code><code>'endskin_name'</code> <code>);</code>
</div>
<div>
<code>  </code><code>delete_option( </code><code>'endskin_name2'</code> <code>);  </code>
</div>
<div>
<code>}</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
<p>
这些代码直接放到插件的文件里即可,不过卸载钩子不能使用类函数,否则会把 $this 保存到数据库里,所以如果不是万不得已请尽可能的使用 uninstall.php 文件。</p>
<p>
<strong>移除自定义文章类型的部分组件</strong><br>
WordPress 自定义文章类型用很多组件,当我们不需要的时候可以通过 remove_post_type_support() 函数来移除掉,下边是一份可以移除的组件的列表:</p>
<ul>
<li>
title</li>
<li>
editor</li>
<li>
author</li>
<li>
thumbnail</li>
<li>
excerpt</li>
<li>
trackbacks</li>
<li>
custom-fields</li>
<li>
comments</li>
<li>
revisions</li>
<li>
page-attributes</li>
<li>
post-formats</li>
</ul>
<p>
比如移除掉自带的 “文章” 文章类型的评论功能:</p>
<div>
<div>
<div id="highlighter_544450">
<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>
</td>
<td>
<div>
<div>
<code>/**</code>
</div>
<div>
<code>  </code><code>*移除文章的评论功能</code>
</div>
<div>
<code>  </code><code>*http://www.endskin.com/remove-post-type-support/</code>
</div>
<div>
<code>*/</code>
</div>
<div>
<code>function</code> <code>Bing_remove_post_type_support(){</code>
</div>
<div>
<code>  </code><code>remove_post_type_support( </code><code>'post'</code><code>, </code><code>'comments'</code> <code>);</code>
</div>
<div>
<code>}</code>
</div>
<div>
<code>add_action( </code><code>'init'</code><code>, </code><code>'Bing_remove_post_type_support'</code> <code>);</code>
</div>
</div>
</td>
</tr></tbody></table>
</div>
</div>
</div>
頁: [1]
查看完整版本: WordPress中卸载插件以及移除文章类型组件的代码示例