安卓系统下抓网络数据包

在研究某些分类信息采集,以及安卓网络部分开发的过程中经常需要到在安卓下抓包。下面介绍三个工具
一个是tcpdump一个是Wireshark还有是better terminal emulator pro
大的分类信息网站都有自己的安卓软件。我可以可以通过对其软件抓包,分析其中我们需要的部分
将tcpdump复制到/system/xbin下
打开better terminal emulator pro
输入以下命令p -vv -s 0 -w /sdcard/capture.pcap

进行抓包操作后会在SD卡下面发现capture.pcap
将他复制到桌面行 打开Wireshark 进行分析

下图为我抓到的赶集网数据

Posted in 石家庄生活 | Tagged | Leave a comment

蚂蚁分类信息二次开发之对列表图的优化

在采集或者在使用蚂蚁分类信息过程中,有些图片会丢失。会造成列表图片不能显示的状况
对模板页面info_list.PHP 进行修改 判断图片路径是否有文件。有则赋值。没有则为空
代码如下
$img_str = dirname(dirname(dirname(__FILE__))).$val['img_path'];

if(file_exists($img_str)){
$infolist['img_path'] = $val['img_path'];
}

解决因图片丢失 造成图片红叉问题

Posted in 数据采集 | Tagged | Leave a comment

蚂蚁分类信息二次开发模板(搜索页)

最近用蚂蚁分类信息系统改成一个二手车网。写此文 以方便以后查找翻阅
蚂蚁分类信息 采用的是PHP+smarty做的模板。smarty的文件在INCLUDE的ASSGIN下

在做搜索的时候发现蚂蚁自带的搜索当关键字为空的时候 会提示没有搜索内容。我计划做价格在一定范围内的搜索就必须要有关键词。
在SEARCH.PHP做下面的修改
删除
if($keywords != '' && strlen($keywords) < 2) write_msg('您输入的关键字太短了!关键字不能少于2个字节!');

当关键词唯恐 或者小于2的时候 的控制
删除
if($keywords != ''){

删除对字符串为空的控制
查找
$where .= " AND ($sqlkeywords)";
替换为
if($keywords==''){
}else{
$where .= " AND ($sqlkeywords)";
}
当为空的时候不操作 不为空的时候添加
查找
$result['title'] = HighLight($val['title'],$keyword ? $keyword : $keywords);
$result['content'] = HighLight(substring(clear_html($val['content']),0,180),$keyword ? $keyword : $keywords);

替换为

if($keywords == ''){
$result['content'] = clear_html($val['content']);
$result['title'] = $val['title'];

}else{
$result['title'] = HighLight($val['title'],$keyword ? $keyword : $keywords);
$result['content'] = HighLight(substring(clear_html($val['content']),0,180),$keyword ? $keyword : $keywords);
}
此部分是对搜索词 高亮的处理。当关键词为空的时候 没有高亮 所以直接输出即可
这样就完成了 当关键词为空的时候依然可以搜索出结果。

Posted in 数据采集 | Tagged | Leave a comment

科讯最新8.0火车采集器文章、图片发布模块

解压密码 http://www.liyunpeng.com
下载地址见科讯官方论坛

Posted in 数据采集 | Tagged | Leave a comment

马克斯CMS电影采集火车采集支持连载支持新添数据源

马克斯CMS系统采集免登陆接口的功能特性

1、基本的数据入库操作
2、同名剧集可作为追加连载
3、同名剧集不同播放器可作为新的播放源追加

网址www.liyunpeng.com 欢迎登陆本人博客

目前物价飞涨 免费版仅支持正常的入库操作。付费用户支持连载以及添加新的数据源。支持MSSQL数据库 免费版只支持ACCESS数据库入库。这个很简单加个数据连接就可以。
以下是视频教程

解压密码www.liyunpeng.com

下载地址 http://bbs.locoy.com/spider-65307-1-1.html

Posted in 数据采集 | Leave a comment

哈尔滨制药六厂网站被黑!哈药六厂网站被黑!

博主在群里看到有人说哈尔滨制药六厂的网站被黑了。发来个地址

http://www.hayaoliu.com.cn/

我也上去看看 在没恢复之前看看截图

哈尔滨制药六厂网站被黑截图

哈尔滨制药六厂网站被黑截图


开始我还不信 到百度上搜索下 地址还真是
哈药六厂网站被黑截图

哈药六厂网站被黑截图


随着哈尔滨制药六厂皇宫一样装修的办公楼被曝光以后,民间看来是怨声载道.一边是医院里的高药价,一边是制药企业挥霍般的装修。也随着网络的发展,在现实中民怨全部反应在网络上。通信技术的发达使得一些愚民的事件一一被曝光,从中石油的天价吊灯,到哈尔滨制药六厂的豪华装修。到底我们中国怎么了。改革开放30年把我们五千年来的文化传统怎么了。
哈药六厂被黑截图

哈药六厂被黑截图


以上是爱站网的截图。一个这么大个药厂的网站服务器居然有100多个站,看来该省的地方一样省啊

Posted in 石家庄生活 | Tagged , | Leave a comment

李双江与梦鸽是谁,李双江前妻是谁

李双江与梦鸽是谁,李双江前妻是谁 这个是我在天涯看到的。

1990年10月26日,李双江和梦鸽在北京友谊宾馆举行隆重婚礼。首都文艺界上千人前往祝贺这一对师生终成眷属。

梦鸽出生于湖北省沙市,原为市歌舞团演员。1984年,18岁的她只身来到北京 ,在社会音乐学院学习歌剧演唱。

刚开始时,梦鸽住在平房里,生活很困难。但她一心一意扑在学习上,进步很快。几年下来,已在北京城里小有名气。

1988年春节,李双江在中央电视台春节晚会上唱了一首<中国龙>,梦鸽听了很受感动,萌发了拜李双江为师的想法。梦鸽给李双江唱了一首东北民歌<拜大年>。李双江听了梦鸽的歌后,认为她很有潜力,有发展前途,感叹地对她说:”你的嗓子真好!”梦鸽说:”李老师,如果您觉得我还可以的话,以后我有机会想跟您学一学。”李双江问了一些梦鸽的情况后,说:”女生,我是不教的。”这是因为当时李双江还是一个人。

春节晚会后,中央电视台组织春节晚会剧组到湖北等地演出。途中,李双江对梦鸽有了更深的了解。梦鸽虚心地向李双江学习声乐方面的知识;李双江倾心地向她传授自己的经验。演出成了他们幸福的旅程。梦鸽发现李双江热情、奔放、对事业执著,对他从崇拜仰到倾慕;李双江发现梦鸽纯情、聪明、对人生挚爱,对她从爱护到爱恋。一对师生跨越年龄的障碍,成为一对恋人。

李双江和梦鸽的恋爱,大多数朋友是赞同的,但也有少数人持异议说些风言风语,有的甚至去诋毁李双江。对此,李双江和梦鸽都很坦然。他坚信自己的选择。对于别人的攻击,他们一笑了之。

社会音乐学院对梦鸽很重视,一直希望她能在北京站住脚,但他们心有余而力不足。后来,梦鸽进了首都钢铁公司艺术团,1988年,又考进了中国音乐学院,户口也由湖北转到了北京。1994年初,梦鸽又调进了总政歌舞团。

梦鸽和李双江结合后,艺术上进步很快,从1988年开始,她每年都在中央电视台春节晚会上演出。还多次参加各种艺术团体出访新加坡、澳门、香港等地。1995 年,梦鸽的演唱专集在中央电视台播出。她的歌曲专集也出版发行。

李双江84岁高龄的母亲对儿媳很满意,她常说,有个好儿不如有个好儿媳,鸽子这孩子真好。

李双江的感情生活一直都很不顺利,自从有了梦鸽后,他的全家都非常幸福。愿李双江和梦鸽的艺术爱情永葆青春。

Posted in 石家庄SEM | Tagged , | Leave a comment

晋O00888奥迪与京J79272宝马是谁的车?车上有枪?

网友爆料:9月6日晚北京海淀西山华府小区,一辆无照宝马和牌照晋000888的奥迪车主(两人不超过20岁),在小区门口暴打一对夫妇,不理会求饶和其5岁孩子的哭喊,叫嚣“谁敢打110!”。丈夫头被打破被送往医院。打人者被100多业主围住。宝马有人民大会堂车证,奥迪车被网友人肉出属于山西省国税局

晋000888奥迪车

晋000888奥迪车

京J79272宝马车

京J79272宝马车

Posted in 石家庄SEM | Tagged , | Leave a comment

WordPress 插件开发教程- Part-2

本部分教程包括以下内容:
创建一个可靠的插件基础
确定目录和文件的路径
使用“启用”( Active )和“停用”( Deactivate )功能
了解可用的插件的卸载方法
提供最佳实践和代码标准
了解规范的代码文档
使用插件开发参考表
本部分教程包括以下内容:
创建一个可靠的插件基础
确定目录和文件的路径
使用“启用”( Active )和“停用”( Deactivate )功能
了解可用的插件的卸载方法
提供最佳实践和代码标准
了解规范的代码文档
使用插件开发参考表
在 WordPress 中开发一个插件的时候,最重要的是要从可靠的插件基础开始。有

一个好的基础可以在开发过程中避免许多令人头痛的问题。本部分内容讨论的技

术会作为一个示范在整个教程中使用。

创建一个插件文件
WordPress 中的插件可以是一个单独的 PHP 文件,也可以是一个目录下的多个文

件。在创建一个新插件的时候你需要考虑很多事情,比如插件的名字和适当的目

录使用。

为你的插件命名
在为插件选名字的时候,最好根据插件的实际功能来。比如,一个 SEO 方面的插

件,你就不想把它命名成”我的插件“。你的用户没办法通过你的插件名字来知

道你的插件究竟是做什么的。你的插件名字必须是唯一的并且能很好的描述它的

功能。

去wordpress.org 官方插件目录搜一搜和你的插件相近的插件可以很好的避免混

淆。如果你打算把你的插件命名为 SEO Gold,而已经有一个叫 SEO Sliver 的插

件了,就有可能带来混淆了。在 Part – 17 “营销你自己的插件”中我们将详

细讨论这个问题。

使用文件夹
强烈建议把你的插件放在 plugins 目录下的子文件夹中。所有的从

WordPress.org 下载的插件都自动的放在了子目录下面。这样你就可以方便的包

含多文件以及使用其他的内容,比如图片。子目录还可以再包含子目录来更好的

组织你的插件文件。文件夹的名字必须和你的主插件文件相同。在文件夹名称中

不应该包含任何空格( )或者下划线(_),如果需要就是用连字号(-)。子目录和文

件的目录组织结构会在接下来的”最佳实践“中讨论。

最佳实践
下面是开发 WordPress 插件的一系列的最佳实践。这一部分所介绍的最佳实践是

你应该在所有的插件中都严格遵守的。这有助于消除许多在 WordPress 中遇到的

常规错误。这些最佳实践同样会使你的插件的组织更加清晰。

全部加上前缀
在开发插件的时候,在所有东西前面都加上唯一的前缀是非常关键的。这包括插

件中的文件、函数名、变量名、以及其他所有包含在插件中的东西。为什么呢?

很简单,插件开发中一个最普遍的错误就是使用了太普遍的函数名或者变量名。

例如你的函数名是 update_options(),如果用户安装的其他插件中有同名的函数

,网站会出错,因为在 PHP 中是不能有两个同名的函数的。

一种比较好的规则是用你的插件的首字母,和你自己的首字母来做前缀。例如你

的名字是 Michael Myers,你的插件名字是 Halloween Revenge,那么你的前缀

可以是 mm_hr_update_options()。这样子其他的插件与你的插件同名的机会就很

小了。这样和其他插件冲突的风险就很小了。

对于变量名,这也是个好办法。在声明变量时,不要使用常见的名字。例如,你

的插件中有个变量叫 $post 。这就可能引起非预期的结果,因为 $post 是

WordPress 中包含文章数据的全局变量。如果在 WordPress 仍然需要用文章数据

的时候你的插件覆盖了 $post 中的数据,那就可能遇到严重的问题了。所以你应

该使用与上面类似的前缀 $mm_hr_post。在其他插件中基本不会用到这个变量了

下面的文章中,使用 lc_ 和 myplugin_ 组合来做前缀,比如

lc_myplugin_function_name()。

文件组织
对于开发专业的插件来说,插件文件的良好组织是非常重要的。一般来说,在你

的插件文件夹中只放两个文件:一个是插件的主 PHP 文件,另一个是

uninstall.php 文件。为了有序的组织,把其他的插件所需文件都放到其他子目

录下面去。

同样建议将插件分到几个小的文件中。这么做一个主要的原因是性能的原因。例

如,你应该把所有的管理界面的代码放在一个独立的文件中。这使得你可以在用

户浏览 WordPress 管理员界面时有条件的包含管理员代码。

123456

上面的例子使用 is_admin() 条件语句来验证用户是否在 WordPress 的管理控制

板中。如果是,你的插件应该包含 /includes/admin.php 文件。

目录结构
另一个插件开发中的要点是要有清晰的目录结构,从而很好的包含插件中所有的

小文件。例如,你的插件需要 JavaScript 文件,就建立一个 /js 目录来存放左

右的 JavaScript 文件。如果有样式表文件,就建立一个 /css 目录来存放所有

的样式表文件。同样所有的图片放在 /images 目录里面。

下面看看一个插件的标准的目录结构:

/unique-plugin-name — 唯一的插件名称,不要包含空格或者特殊字符

unique-plugin-name.php — 唯一的插件名称,插件主文件
uninstall.php — 插件的卸载文件
/js — JavaScript 文件
/css — css 样式表
/images — 图片
/includes — 存放要包含的 PHP 文件
用清晰的目录结构来使得你的文件有序使得追踪文件的时候更方便。多于其他的

插件卡发着来说,他们更容易理解你的插件的逻辑。

必要的插件头部
插件要在 WordPress 中起作用,其头部是唯一的必须代码。“插件头部”是位于

插件文件头部的一段 PHP 的注释代码块。这段注释块告诉 WordPress 这是一个

有效的插件。

创建头部
下面是一个插件的头部示例:

1234567891011

WordPress 只需要 Plugin Name 这一行就可以识别插件,不过最好是像上面一样

填写详细的信息。

Plugin URI 是连接到你的插件的详细内容的网页的链接。Description 是插件的

简短描述。Version 是当前插件的版本。WordPress 使用这里设置的版本号来检

查插件在 wordpress.org 的更新。下面两行是 Author – 作者,和 Author URI

– 作者的网站。最后一行是这个插件发布所遵照的许可证。

插件许可证
在插件头部的注释块中,最好包含你的插件的版权。对于插件的功能来说,这不

是必须的,但是任何时候你发布代码,都最好包含版权信息。这是你的用户知道

你的插件的版权是什么,以及他们可以如何使用你的插件。part-17:插件营销中

,我们会详细讨论这个话题。

WordPress 的版权是 GPL 软件版权所以任何 WordPress 的插件都要是和 GPL。

下面是一段 GPL 版权注释块的示例。

123456789101112131415

只用填上年份,插件作者名,以及 email 就可以了。然后把这段注释放在插件的

头部。这样你的插件就急于 GPL 版权协议了。

确定目录结构
通常你要确定你的插件的目录和文件结构。例如,图片都放在 images 文件夹下

。一般来说,最好在插件中硬编码一个目录结构。WordPress 可以被配置运行在

许许多多的情形下,所以目录结构说不定就是个错误。这部分介绍确定目录和文

件结构的合适的方法。

插件路径
最基本的事情就是把你的文件和目录引入到 WordPress 的安装中。要引入文件有

两种方法:使用本地服务器路径,或者使用标准的 URL。

本地服务器路径就是计算机的目录。本地服务器路径通常在你要包含在你本地服

务器上的内容时使用。URL 则通常用来连接你的服务器外部的内容,不过这并不

是说你就不能用 URL 来连接本地服务器上的内容了。

WordPress 支持把 wp-content 目录移动到不同的位置。由于这个原因,在

WordPress 中你不应该硬编码目录,而应该用可用的函数来确定正确的路径。

本地路径
插件开发中有一个常见问题:确定你的插件文件的本地路径的合适方法是什么?

要确定你的插件的本地路径,应该使用 plugin_dir_path() 函数。

plugin_dir_path() 函数从它的文件名中提取和插件目录对应的物理地址。

1

参数:
$file – (string)(必须) — 插件的文件名

下面看如何确定到你的插件目录的本地路径的例子:

123

把 PHP 常量 __FILE__ 传递给了 plugin_dir_path() 函数。这会生成指向你的

插件目录的完整的本地路径。

/public_html/wp-content/plugins/my-custom-plugin/

如何得到在你插件目录下的子目录中文件的本地路径呢?同样可以使用

plugin_dir_pah() 函数并加上子目录和文件名:

123

这段代码会输出下面的结果:

/public_html/wp-content/plugins/my-custom-plugin/js/scripts.js

这个函数在开发一个健壮的 WordPress 插件时很有用。使用正确的方法来访问你

的插件文件和目录可以确保你的插件与 WordPress 安装的兼用性,不管它是怎么

自定义的。

URL 路径
同样有函数帮助确定WordPress 中的 URL。下面是这些函数的列表:

plugins_url() — 插件目录的 URL (例如:http://example.com/wp-

content/plugins)
include_url() — includes 目录的 URL (例如:http://example.com/wp-

includes)
content_url() — content 目录的 URL (例如:http://example.com/wp-

content)
admin_url() — admin 目录的 URL (例如:http://example.com/wp-admin/)
site_url() — 当前网站的 URL (例如:http://example.com)
home_url() — 当前网站首页的 URL (例如:http://example.com)
site_url() 和 home_url() 很相似,容易混淆。site_url() 返回的是数据库中

wp_options 表里面的 siteurl 字段值。这是指向 WordPress 核心文件的 URL。

如果你的 WordPress 核心文件在你的服务器的子目录中,比如 /wordpress,那

么 site_url() 的值就会是 http://example.com/wordpress 。

home_url() 则从 wp_option 表中取得 home 字段的值。这个地址是你希望访问

你的 WordPress 网站的 URL 地址。例如,你的 WordPres 核心文件放在

/wordpress 目录下,但是你希望你的 URL是 http://example.com,那么就要把

home 的值设置成 http://example.com。

plugins_url() 函数在写 WordPress 插件的时候很有用。这个函数可以确定在插

件目录下的任何文件的完全 URL。

1

参数:

$path — (string)(可选) — 相对于 插件 URL 的路径
$plugin — (string)(可选) — 要相对的插件文件(如果是自己,就传 __FILE__

)
例如:要在插件中引用一个图片文件,可以这样子:

1 ‘;?>

第一个参数是要用到的图片文件的相对路径。第二个参数是要取相对路径时的参

考文件,本例中直接是 —__FILE__。上面的代码会生成下面的 HTML 标签:

1

下面是使用 plugin_url() 函数来确定插件的 URL 的好处:

支持 mu — 插件的插件目录。
自动检测 SSL,所以如果 SSL 被开启,那么 URL 会自动返回包含 https 的。
使用 WP_PLUGIN_URL 常量,意味着即使用户把插件移动到了自定义的位置,也可

以检测到插件的目录。
使用 WPMU_PLUGIN_URL 常量来支持 Multisite
activate/deactivate 函数
WordPress 有一些插件开发中可用到的通用函数。下面介绍 activate 和

deactivate 函数。

插件 activation 函数
插件 activation 函数当一个插件在 WordPress 中”activated(启用)”时被触

发。

这个函数叫做 register_activation_hook()。使用这个函数可以用来为插件设置

一些默认选项。也可以用来验证插件和 WordPress 版本的兼容性。这个插件接收

两个参数:

1

参数:

$file — (string)(必须) — 主插件文件的路径。
$function — (string)(必须) — 当插件启用时要执行的函数。
下面是一个例子:

123456

第一个参数是插件的路径,使用了 __FILE__ 常量。这个一个 PHP 自带的常量,

指向调用它的文件的 绝对路径。第二个参数是唯一的一个函数名。

知道了 register_activation_hook() 函数的用处后,我们看一个真实的例子。

下面的例子用来验证 WordPress 的版本:

12345678

function boj_install() { if( version_compare( get_bloginfo( 'version'

), '3.1', '<' ) ) { deactivate_plugins( basename( __FILE__ )); //禁用插 件 } } ?>

我们使用 get_bloginfo() 函数来取得当前安装的 WordPress 版本号。接着用

PHP 函数 version_compare() 来验证安装的 WordPress 的版本是否至少为 3.1

。如果低于 3.1,就调用 deactivate_plugins() 函数来 禁用插件。

在启用时进行默认设置
另一个常用的启用技术就是在你的插件启用时为它设置默认选项。假设你的插件

有许多许多选项,也许有一些选择需要被设置才能保证插件正常工作。你可以再

启动时自动设置默认值,而不用让用户跑到设置页面来亲自设置。

123456789101112 ‘grid’, ‘food’ => ‘bazon’, ‘mode’ =>

‘zombie’ ); update_option( ‘boj_myplugin_options’,

$boj_myplugin_options ); } ?> }

上面的代码在你插件启用时生成了一个包含默认值的数组并把它们存到

WordPress 中。在 part-7,”插件设置” 中将详细介绍创建和保存插件选项。

插件 deactivation (禁用)函数
和启用函数类似,同样有禁用函数。叫做 register_deactivation_hook() 函数

。这个函数在插件被禁用时触发。这个函数和前面的启用函数一页同样接收两个

参数。

1

参数:

$file — (string)(必须) — 主插件文件的路径。
$function — (string)(必须) — 当插件禁用时要执行的函数。
下面是一个例子:

123456

在禁用插件时执行 boj_myplugin_uninstall() 函数。

禁用 != 卸载
在处理禁用的时候,不应该包含卸载插件的功能。因为禁用了还可以重新启用的

,但卸载(删除)就不一样了。注意:WordPress 在自动更新的时候,会先禁用所

有的插件,然后再安装 WordPress 的新版本。

卸载的方法
为插件提供卸载功能可以方便的删除掉插件添加到 WordPress 中的数据。这应该

是每个插件的必须部分。这不会带来多少工作量,但是可以让用户来选择是否完

全删除它。

为什么卸载是必须的?

想像一下插件是安装到你电脑中的一个软件。你就希望这个软件有个非常方便的

卸载的方法。你同样希望可以彻底卸载该软件的所有内容。WordPress 中的插件

也是同样的意思,实质就是安装在 WordPress 中的软件。如果用户希望删除这个

插件,你应该为用户提供从 WordPress 中彻底删除它的功能。

关心插件用户的数据是一个良好的规则。例如如果你的插件建立事件作为自定义

文章类型,也许用户希望卸载插件,但并不希望删除他们所有的事件。因此你或

许希望询问用户是否要删除他们的数据。

WordPress 提供了两种卸载插件的方法:一个是 uninstall.php 文件,另一个是

uninstall 钩子。

uninstall.php
第一种方法:uninstall.php 文件。这是典型的流行方法,因为它把你所有的卸

载代码放在一个独立的文件中。要使用这个方法,创建一个 uninstall.php 文件

并放置在插件的根目录。如果这个文件存在,WordPress 会在插件被删除的时候

执行这个文件的代码。下面是使用 uninstall.php 文件的一个例子:

12345678

第一件要做的事就是验证确实是 WordPress 在调用 uninstall.php 文件。通过

严重 WP_UNINSTALL_PLUGIN 常量是否定义。如果没有,立即退出。这是一个保证

只有在删除插件时才能够执行 uninstall.php 文件的安全的方法。

在验证了这是合法的卸载调用以后,就可以从数据库中删除插件的设置项了。插

件卸载脚本的目的是要从数据库中删除任何与插件相关的内容。这包括删除所有

选项,已经删除所有自定义的表。你不需要操心删除插件的文件或者目录的事情

,一旦卸载脚本执行了,WordPress 会自动为你做这些事情。

卸载钩子
第二种可用的卸载方法叫做卸载钩子。如果你删除一个不存在 uninstall.php 的

插件,WordPress 会执行卸载钩子(如果存在的话).

1

参数:

$file — (string)(必须) — 插件主文件的路径
$function — (string)(必须) — 在插件卸载后要执行的函数
下面看卸载函数的例子:

1234567891011

register_uninstall_hook() 必须在启用函数中调用。因此要在使用

register_activation_hook() 函数执行插件启用的函数中包含 uninstall 钩子

。接着调用 uninstall 函数。注意:如果插件根目录下包含 uninstall.php 文

件,那么删除钩子是不会执行的。

重要:要知道不能使用一个类的方法作为卸载钩子的回调函数。因为卸载钩子会

保存一个 $this 的引用到数据库中,它多那个页面的加载来说是唯一的。

如本节中提醒的,使用卸载钩子有许多陷阱。所以最好使用更简洁的

uninstall.php 文件来进行卸载。

编码规范
WordPress 在所有的核心代码中保持着一系列的编码规范。这有助于保持整个

WordPress 的代码格式始终如一,易于阅读。所以建议在插件开发过程中遵循这

些编码规范。这有助于使核心代码和插件保持一致。在

http://codex.wordpress.org/WordPress_coding_Standards可以看到官方的编码

规范。

代码文档
一个最明显,但又最容易忽略的步骤就是代码注释。注释你的插件的源代码是最

快速便捷的写插件功能文档的方式。注释代码有许多许多好处。主要的代码注释

的好处就是解释你的代码究竟是干什么的。

想像一个没有一行注释的十分复杂的插件。如果你不检视几个月的代码,或许你

是不会明白这代码是干什么的。再想象其他的开发者看你的没有注释的代码,则

可能花费更长的时间来弄清插件的功能。注释对任何人都有好处,所以一定记得

要注释。

几乎所有的 WordPress 核心函数都包含 PHPDoc 形式的行内文档。PHPDoc 是一

个标准的描述函数作用的注释形式。下面是一段基本的 PHPDoc 格式的函数注释

1234567891011121314

上面的 PHPDoc 注释直接在注释块中描述函数的功能。如果一个开发者查看你的

插件的代码,他不用看函数的代码也可以很快可以明白你的函数的功能,接受什

么参数,返回什么结果。这些注释也被许多可视化软件使用,例如

PHPDocumentor 和 PHPXref。

变量、函数和文件的命名
变量和函数名应该全部小写。代词应该用下划线来分割。下面是函数和变量命名

的正确方法:

function boj_myplugin_function_name ( $boj_myplugin_variable ) {
// do something
}
?>

文件名同样应该只使用小写字母,不过,文件名应该用连字号”-”来分割单词,

而不要用下划线。例如你应该这样命名插件文件:boj-plugin-name.php

单引号 v.s. 双引号
PHP 同时允许使用单引号或者双引号来定义字符串。WordPress 中推荐在可能的

情况下尽量使用单引号。使用单引号的一个好处这样你就很少需要在字符串中去

避免 HTML 的引号。下面是使用单引号来输出一个超链接的方法的例子:

123 访问 example.com

‘; ?>

在 PHP 中连接一个字符串时,你也可以使用双引号方法。例如:看下面的为网站

URL 插入一个变量的简单方法:

1234 访问 example.com “; ?>

把 $boj_myplugin_website 变量设置成你想包含在 HTML 超链接中的 URL。然后

把这个字符串连接到 echo 语句中的网站 URL 中。

缩进
缩进应该反映代码的逻辑结构。这意味着在缩进时使用 tab 而不是空格。下面是

很差的 if 语句缩进的例子:

1234567

上面代码的逻辑很难体现出来,因为没有反应 if 语句代码逻辑结构的缩进。下

面是使用合理缩进的例子:

1234567

注意如何使用合适的缩进来使得代码的逻辑更显而易见。你可以简单的跳过这段

内部代码而直接明白这些语句的结果。这就是为什么你的所有代码都必须有合适

的缩进。

括号格式
多行代码块必须使用花括号。括号应该和你要检查的条件语句在同一行中。看合

适的使用花括号的例子:

1234567891011

如果你的代码块很长,最好在结束的花括号后面加一小段注释来帮助确定这是哪

个花括号的结束。

1234567891011

空格的使用
在括号的后面、逻辑或者赋值运算符的两端都应该加一个空格。下面看看几个合

适的使用空格不同例子:

123456789101112

注意每一个语句的空格使用技巧。这使得阅读以及理解代码逻辑更容易,因为真

个代码简洁一致。

PHP 简写
你不应该在代码中使用 PHP 标签的简写形式 ( )。因为简写形式要起作用

必须在服务器中开启。许多主机的配置,该选项是被禁止的,这样你的代码直接

就崩溃了。所以应该使用标准的标签形式:

1

SQL 语句
在操作数据库时,你可能会用到 SQL 语句。复杂的 SQL 语句可以分成多行来写

。尽管 SQL 语句是大小写不敏感的,最好还是把 SQL 命令写成大写形式。

1 SELECT username FROM table1 WHERE status = ‘active’

part-6,插件安全中,将详细讨论在 WordPress 中使用 SQL 语句的正确方法。

插件开发检查列表
在开发 WordPress 插件时,你需要记住许多事情来创建一个合适的插件基础。下

面的列表帮助你完成这个过程。跟随这个列表,你就可以确保有一个合适的插件

基础了:

确定一个具有描述性的唯一的插件名
名字是否可以描述你的插件的功能
是否验证了插件名在插件目录中不存在
为插件设置一个唯一的前缀
前缀是否足够特殊来避免冲突
建立插件的目录结构
是否需要 PHP 目录
是否需要 JavaScript 目录
是否需要 CSS 目录
是否需要 images 目录
建立默认的插件文件
建立和插件文件夹名同名的主插件文件
建立 uninstall.php 文件来执行卸载过程
建立插件的头部代码
设置你希望显示的插件的名字
添加一个详细的插件目的的描述
设置正确的版本
确保设置了插件的 URI 和 作者的 URI 的值
包括版权信息
在插件头下面直接包含版权信息
建立插件的启用函数
你的插件功能的实现是否需要一个特殊的或者更高的 WordPress?
你的插件是否要在启用时设置默认值?
建立插件的禁用函数
你的插件是否要在禁用时执行神马东西?
建立插件的卸载脚本
建立 uninstall.php 文件
在文件中包含卸载脚本
文件引用
使用合适的目录常量和函数来确定 WordPress 和插件中的路径
总结
本章讨论了在进行 WordPress 插件开发时建立一个合适的插件基础。遵循这些步

骤是建立跨各种版本的 WordPress 插件的精髓。保持合适的代码文档同样是描述

插件功能的重要步骤。这会在你今后升级代码的时候节省时间。这也同样会帮助

其他开发者明白你的代码逻辑。

Posted in 石家庄SEM | Tagged | 2 Comments

WordPress 插件开发教程 – Part-1 –

前提不是自己写的 转载的 最近想做WP的插件 所以看看

本部分教程包括以下内容:

  • 了解什么是插件
  • 使用可用的 WordPress APIs
  • 插件的加载顺序
  • 热门插件示例
  • 分别插件和模板功能上的不同
  • 安装和管理插件
  • 了解插件的类型

WordPress 是现在很火的开源免费的内容管理系统。它火的一个重要原因就是你可以方便的通过插件来自己定制它。WordPress 为开发者提供了一个十分方便且强大的平台。

首先明白插件如何工作的,以及 WordPress 中所包含的工具,是开发专业的 WordPress 插件的关键。

本部分教程包括以下内容:

  • 了解什么是插件
  • 使用可用的 WordPress APIs
  • 插件的加载顺序
  • 热门插件示例
  • 分别插件和模板功能上的不同
  • 安装和管理插件
  • 了解插件的类型

WordPress 是现在很火的开源免费的内容管理系统。它火的一个重要原因就是你可以方便的通过插件来自己定制它。WordPress 为开发者提供了一个十分方便且强大的平台。

首先明白插件如何工作的,以及 WordPress 中所包含的工具,是开发专业的 WordPress 插件的关键。

什么是插件?

插件( Plugins )是如何与 WordPress 交互的:

WordPress 为插件提供了多种丰富的 APIs。每一种 API( 应用程序接口 )使插件和 WordPress 以不同的方式交互。下面是 WordPress 提供的主要 APIs 以及他们的功能列表:

  • 插件: 给插件提供一系列的钩子( hooks )来使用 WordPress 的相关部分。WordPress 包含两种不同类型的钩子: 动作( Actions )和过滤器( Filters )。动作让你可以在运行时的特定时刻触发自定义的插件代码。例如,可以在用户在 WordPress 中注册了一个账户后触发一个自定义函数。 过滤器用来修改在数据库中添加或获取的数据。
  • 小工具( Widgets ):在你的插件中创建和管理小工具。Widgets 在 Appearance -> Widgets 下面,并可以在你的模板中任何注册过的 sidebar 中添加。这个 API 允许在 sidebar 里面添加一个 widget 的多个实例。
  • 短代码( Shortcode ):为你的插件提供短代码支持。短代码是一个可以让你通过类似这样[shortcode]的方法调用一个 PHP 函数的钩子。
  • HTTP: 从你的插件发送 HTTP 请求。这个 API 可以从一个外部的 URL 获取或者提交内容。目前你有5种发送 HTTP 请求的不同方法。这个 API 在每个方法执行前使过程标准化。这个 API 会基于你的服务器的设置使用合适的方法来发送请求。
  • 设置( Settings ): 在你的插件中插入设置部分。使用设置 API 的主要好处就是安全。所有的设置数据都是检查过的,所以当你保存插件设置时不用担心跨站虚假请求攻击( cross site request forgery, CSRF) 和跨站脚本( cross site scripting XSS )攻击。
  • 选项( Options ): 在你的插件中保存和获取选项。这个 API 允许创建新选项,更新现有选项,删除选项以及可选的控制板( Dashboard )定义。
  • 小工具( Widgets ): 创建控制板小工具。小工具自动出现在 WordPress 的后台控制板中,并且包含标准的自定义操作,包括最小化、拖拽和隐藏。
  • 重写( Rewrite ): 在插件中创建自定义的重写规则。这个 API 让你添加静态链接-点( /custom-page/),结构标签( %postname% ),和附加的 feed 链接( /feed/json/ )。
  • 临时选项( Transients ): 在你的插件中创建临时选项( 缓存数据 )。这个 API 类似于 选项( Options ) API,只不过所有的选项都有过期时间。
  • 数据库( database ): 可以访问 WordPress 数据库。可以再你的插件中增删改查数据库记录。

WordPress 中的函数也可以是”插件”(插件函数)。这些函数让你可以继承一个插件里面的核心函数。例如,wp_main() 函数就是一个”插件函数”。你可以在你的插件中定义这个函数,然后使用 SMTP 而不是默认的方法来发送邮件。所有的”插件函数”都定义在 /wp-includes/pluggable.phpCore 文件中。在特定的插件任务过程中,你可以使用一些预定义的函数,例如当一个插件启用或者停用或者删除插件的时候。在第二章: 插件基础, 中将详细介绍

插件什么时候加载?

插件在 WordPress 页面调用之前加载。图 1-1 显示了 WordPress 页面加载的标准过程。在加载 admin 页面的时候流程有少许变化。不过差异很小,主要是关于加载什么模板的:管理页面模板或者网站模板。

可用的插件

你要知道在哪里找 WordPress 插件。网上到处都能下载到插件,但是这并不总是个好主意。从不可靠的地方下载插件可能导致恶意软件注入,以及危害其他插件。最好从官方网站以及可靠的网站下载插件。

官方插件下载地址

找插件第一个考虑的地方就是 wordpress.org 官方插件地址

超过10,000种插件供选择,上亿次的下载量。这里的插件是 100% 遵循 GPL 的免费的供个人或者商业使用的。

热门插件:

下面是5个下载次数最多的插件:

如你所见,上面的插件可以解决很多问题。这些插件提供的功能是非常常用的,也是许多网站需要具备的功能。

使用插件的优势:

在 WordPress 中使用插件有许多优势。你需要理解编写插件的优势,从而真正的明白为什么要编写插件。这也能在编写一个特殊的插件时帮助理解需求。

不修改核心:

使用插件的一个主要优势在于,控制 WordPress 的功能,而不需要修改任何核心文件。核心文件是指所有WordPress 默认安装的文件。

修改核心文件会为升级 WordPress 新版本的时候带来麻烦。如果你修改了 WordPress 的任何核心文件,在升级的时候这些修改就会被覆盖重写。而更新 WordPress 最重要的是为了保证你的网站的安全。

修改核心文件同样可能引起网站的不稳定。WordPress 中不同的部分的功能的实现要依赖于其他部分。如果你修改了核心文件是它不能按期望的工作,则可能会一起不稳定,甚至很可能破坏整个不相关的功能。

为什么还要重新造轮子呢?

编写插件的另一个优势在于,整个架构已经是现成的了。许多通用的功能已经开发好了并可以直接在你的插件中直接使用了。例如:使用 WordPress 中内建的用户角色,你可以很容易的限制你的代码只有用户为管理员时才执行。看下面的例子:

1
2
3
4
5
<?php
    if( current_user_can( 'manage_options' )) {
        // 这里面的代码只有用户是 管理员的时候才执行。
    }
?>

如你所见,很容易验证一个用户有特定的权限来执行你插件中的代码。在第八章,“用户”中你可以看到账户和角色的内容。

另外一个例子,看看在 WordPress 中发送邮件。当然你可以创建自己的发送邮件的插件,可以有什么必要呢?WordPress 有叫做 wp_main() 用来发送邮件的辅助函数。看下面的例子:

1
2
3
4
5
6
<?php
    $email_to = 'you@example.com';
    $email_subject = '邮件例子';
    $email_message = '我的新插件怎么样?';
    $wp_mail( $email_to, $email_subject, $email_message );
?>

正如你所见,在 WordPress 中发送邮件是多么的容易。除非你的插件需要一些自定义的邮件功能,否则你么必要从头来写这些功能。使用这个函数同样可以确保从 WordPress 中发邮件时最广泛的适用因为你使用的是内建的函数。

使用 WordPress 内建的功能可以节省你开发插件的时间。使用这些内建的函数而不是重造车轮的另一个好处是可以使你的插件在各种不同的服务器环境和设置下正常工作,因此最大化了兼容性。不要重建 WordPress 中已经有的车轮!

区分插件和模板

一个插件可以控制表现的过程;因此一个插件可以变成一个“模板”。类似的模板可以包含插件的功能。因为有时候两个之间的区别会变得模糊,那为什么不直接在你的模板目录中直接包含插件呢?这是一个普遍的问题,也有几个不同的回答。

模板应该包含插件的功能吗?答案是:不应该。主要的原因是因为插件是用来为 WordPress 来添加功能的,而不管用的是哪个模板。这就将你网站的设计和网站的功能很好的区分开来。这个区分是为了你的模板不用捆绑所需要的功能。WordPress 使得你非常容易的改变你的设计,或者说模板,任何时候至于要点几下。如果所有的模板功能都包含在你的模板中,当你换模板的时候,你就会失去那些功能。

还有另一个激烈的争论是:核心功能应该包含在模板中。大多数模板具有的一个普遍功能是 “我在这里” ( breadcrumb ) 导航。这个功能当然可以存在在一个插件中,但是导航栏作为一个核心功能 – 应当包含在模板当中。而且搜素引擎优化功能作为一个常用功能也应该包含在模板中。

方便更新

WordPress 使得更新插件很容易。所有从wordpress.org 官方插件地址 下载安装的插件在有新版本的时候都会提醒你更新。更新插件只需要在后台插件页面中间的的操作就可以搞定。

而不是从官方插件目录安装的插件也可以使用 WordPress 的自动更新功能来更新。插件作者必须设定在哪里可以得到插件的新版本,这样就可以自动更新了。而如果插件的作者没有定义更新的地址,你就必须手动更新插件了。

保持插件更新是使你的网站免受攻击以及消除bug的重要步骤。

方便共享和重用

插件可以很方便的与他人共享。共享一个插件比告诉别人如何修改你的模板的代码容易多了。使用插件同样可以使多个网站具有同样的功能。如果你发现了你喜欢的一些插件,你可以方便的在你的每一个 WordPress 网站上面安装和使用。

插件沙盒

当你在 WordPress 中启用了一个损坏的插件,它不会毁掉你整个网站。如果插件触发了一个致命错误,WordPress 会在它造成破坏之前自动停用它。这种安全的特性使启用和测试新插件的时候的风险大大降低。虽然插件确实会引起错误的白屏或者错误信息,你可以简单的把插件的目录重命名,这样 WordPress 就会自动的停用它了。这样就避免了流氓插件把你自己锁在自己的网站外面。

换句话说,如果你直接修改了 WordPress 的核心文件,你很可能引起一些导致整个网站崩溃的致命错误。这包括造成使得 WordPress 无法修复的损害。

插件开发社区

插件开发有很强大的社区支持,分享知识和代码,并且开发有用的插件。加入这些社区是提高你的插件开发能力的一个非常好的方法。第十八章,”开发人员工具箱” 中将包含许多相关信息。

插件的安装和管理

WordPress 所有插件的管理都在 WordPress 控制板的”插件“页面下,如图 1-2 所示。

图 1-2 中的菜单只对”管理员“可见,非管理员用户是看不到的。如果你使用 WordPress 的多站点功能,插件的菜单默认是隐藏的。你需要在 Admin -> Settings 中启用这个菜单。

安装插件

WordPress 中有三种安装插件的方法。你可以选择其中方便快捷适合你的。

第一种方法:使用内建的安装程序。这种方法允许你在“控制板”中搜索wordpress.org 官方的插件。找到后点击安装,这个插件就会自动下载安装了。

第二种方法:使用 zip 上传程序。你可以上传插件的 zip 压缩文件,WordPress 可以解压并且安装它。使用这种方法只需要在插件安装页面点击“浏览”( Browser )按钮,然后选择插件的 zip 压缩文件上传,点击 现在安装( Install Now )按钮来安装。如图 1-3 所示。

第三种方法:使用 FTP 协议来安装插件。这种方法就是使用FTP客户端程序连接你的网站服务器,手动上传插件的整个目录或者文件到 WordPress 的 wp-content/plugin/ 目录下。

管理插件

 

编辑插件

 

 

插件目录

很少人知道,实际上 WordPress 有两个插件的目录。主插件目录在 wp-content/plugins/ 下面,在安装 WordPress 时自动创建。第二个插件目录位于 wp-content/mu-plugins 下面,表示“必须使用” ( Must-Use ),它不是由 WordPress 自动创建的。你必须亲自创建来用。

两者之间主要的不同在于,mu-plugins 目录是用来放永远执行的插件的。这意味着,在这个目录下的插件会自动的在 WordPress 以及多站点中加载

mu-plugins 目录不会识别子目录,所以所有的插件必须是独立的文件,或者是包含一个子目录中的附件文件。除了在主插件文件中被包含的子目录中的内容,子目录中其他内容都会被忽略。

插件的类型

WordPress 的插件有几种不同的状态。如图 1-4 所示。你在开发和管理插件的时候需要了解这些不同。

  • 启用( Active ) — 在 WordPress 正在使用的插件。
  • 停用( Inactive ) — 安装了但是没有启用。插件中的代码不会被执行
  • 必须使用( Must-Use ) — 所有安装在 wp-content/mu-plugins 目录下的插件。这些插件会自动加载。唯一停用 MU 插件的方法是从 mu-plugins 目录中将其删除。
  • Drop-ins — WordPress 中的核心功能可以被 Drop-in 插件代替。这些插件是位于 wp-content 目录下的一些有特殊文件名的 PHP 文件,它们会被自动加载,并列在插件管理页面的 Drop-in 过滤器下。一下十种 Drop-in 插件可用:
    • advanced-cache.php — 高级缓存插件
    • db.php — 自定义数据库类
    • db-error.php — 自定义数据库错误信息
    • install.php — 自定义安装脚本
    • maintenance.php — 自定义维护信息
    • object-cache.php — 扩展的对象缓存
    • sunrise.php — 自定义域名映射
    • blog-deleted.php — 自定义 blog 删除信息
    • blog-inactive.php — 自定义 blog 停用信息
    • blog-suspended.php — 自定义 blog 挂起信息

最后四个 Drop-in 插件,是 WordPress 多站点功能所特有的。标准安装的 WordPress 是没有这些插件的用法的。

当开发一个新插件的之前,先确定你想创建哪一种类型的插件。大部分插件都是 WordPress 标准的插件,但是偶尔你可能需要创建 Must-Use 插件或者 Drop-in 插件。

测试插件的功能

有时候你能你只是想测试一个插件功能,而不是真的创建一个插件。许多开发者会直接将代码放进 wp-config.php 文件当中来进行功能测试。这是一种不好的方法,不应该用它,因为当 config.php 文件解析和加载后,WordPress 还没有完全的启动。

不要用修改 wp-config.php 的方法,而是用下面的代码段建立一个 test.php 文件并放在你的 WordPress 根目录下:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
    // 加载 WordPress 环境
    // define( 'WP_DEBUG', true ); / * 要 debug 模式 取消注释。*/
    require( './wp-load.php' );
    // require_once( './wp-admin/admin.php' ); /* 要 is_admin() 取消注释 */
?>
<pre>
<?php
    /* 下面是测试的代码 */
    var_dump( is_admin() );
?>
</pre>

这一一种加载所有 WordPress 功能来测试插件功能而不用创建一个插件的快速方法。正如你所见,在文件开头包含wp-load.php 文件。你也可以包含 wp-admin/admin.php 文件如果你想测试管理员的功能。一旦你包含了 WordPress 所需要的核心文件,你就可以测试任何代码了。在测试完成后,别玩了删除 text.php 文件。

总结

这一章,我们学到了什么是插件,以及它们如何同 WordPress 的 APIs 进行交互。我们讨论了使用插件的主要优势以及为什么插件的功能不应该全部直接放在模板里面。我们还讨论了在后台控制板中安装和管理插件。

现在你已经明白了插件在 WordPress 中如何工作,我们是时候开始编写插件了!

 

Posted in 石家庄SEM | Tagged , | Leave a comment