制作wordpress收藏分享插件(wordpress插件开发教程二)

发布于,归属于wordpress9个座位已被强势霸占! 共有396人围观    

上一期主要是讲解制作wordpress收藏分享插件的准备工作,今天这一篇的教程将讲解,如何构建wordpress插件的主文件,也就是wp-share-list.php。(wp-share-list这款插件请到第一篇文章内下载。)

wp-share-list.php

书写插件描述

插件描述需要遵循wordpress插件开发规范,大致的结构如下:

  1. /*
  2. Plugin Name: wp-share-list
  3. Plugin URI: http://www.36ria.com/2217
  4. Description: 在文章末尾生成一个文章分享站点列表
  5. Version: 1.0
  6. Author: 明河共影
  7. Author URI: http://www.36ria.com/
  8. */

很通俗易懂,明河就不解释了,保存后,你点击wordpress后台的插件,这时候就会发现这个新的插件,如下图:

启动这个插件。

ShareList.php

打开示例wp-share-list的主文件后,大家可以发现,代码很少,不像很多插件大部分的代码都集中在主文件,明河将插件所有的操作都封装成了一个类,放在include/ShareList.php。为什么要使用类,而不采用传统的函数式的编程呢?
原因有三:

  • 类可以起到命名空间的作用,防止插件的函数名与其他插件冲突。
  • 简化函数命名,很多插件为了防止冲突,给函数加个个长前缀,出现wp_XX_XX_XX等过长的形式。
  • 让代码更加的简洁易懂,使主文件不再臃肿。

基本的类结构如下:

  1. if ( ! class_exists ( " ShareList" )) {
  2. class ShareList{
  3. function ShareList() { 
  4. }
  5. }
  6. } 
  7. ?>

这个类我们先留空,等下一期教程再深入探讨。

实例化这个类

  1. include("include/ShareList.php");
  2. //实例化类
  3. if(class_exists("ShareList")){
  4.     $SL = new ShareList();
  5. }

现在来介绍wordpress插件中很重要基础知识.

Actions

什么是Action?
有用过ROR或者php框架CI的朋友会更容易理解,其实Action可以理解为钩子,即wordpress提供的接口,利用这些接口,我们可以在wordpress运行特定php方法时,触发自定义的方法。
举个例子:
我们需要向头部添加新的css和js,代码如下:

  1. add_action("wp_head",array (&$SL, 'addHeader' ));

add_action()这个方法有四个参数分别是钩子名、自定义函数名、优先级(可选)、其他参数(可选)
这里解释下,为什么自定义函数名为array (&$SL, ‘addHeader’ )。
$SL这个变量是ShareList的实例,这里我们要调用ShareList中的addHeader这个方法,如果直接写add_action(“wp_head”,”$this->addHeader”);明显是错误的,所以我们需要获取这个实例的引用,跟函数名组成数组让add_action自行拼接处理。
如何移除Action?
remove_action(‘action_hook’,'action_function’)

主文件的全部Action

  1. if(isset($SL)){
  2.     add_action("wp_head",array (&$SL, 'addHeader' ));
  3.     add_action('the_content', array (&$SL, 'addContent' ));
  4.     add_action ('wp-share-list/wp-share-list.php ' , array (&$SL , 'init' )) ;
  5.     add_action('admin_menu','add_share_list_options_page');
  6. }

有四个Action,明河解释下它们分别的作用:

  • 向模板头部添加插件需要的css和js
  • 向the_content,即生成文章正文后,添加js调用,生成分享列表
  • 初始化配置参数
  • 向wordpress后台添加管理页面

来看add_share_list_options_page这个函数

  1. //生成管理页面
  2. if(!function_exists('add_share_list_options_page')){
  3.     function add_share_list_options_page(){
  4.         global $SL;
  5.         if(!isset($SL)){
  6.             return ;
  7.         }
  8.         if(function_exists('add_options_page')){
  9.             add_options_page('wp-share-list','收藏分享列表',9,basename ( __FILE__ ),array (&$SL, 'printAdminPage' ));
  10.         }
  11.     }
  12. }

留意add_options_page这个方法,这个函数会向后台添加插件配置项,有四个参数插件名、菜单项名、优先级、文件名、自定义生成页面函数。

这一期教程到此结束,有什么问题,可以给明河留言,下一期教程将深入讲解ShareList这个类。

(如果您喜欢这篇教程,可以通过支付宝打赏我们1元哦,拜谢!)

跟作者说两句

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-? :) :( :!: 8-O 8)

9个座位已被强势霸占!

  1. silenus

    如何移除Action?
    remove_action(‘action_hook’,’action_function’)
    对应的如果移除刚才加的这个add_action(“wp_head”,array (&$SL, ‘addHeader’ ));
    是不是可以这样写remove_action(“wp_head”,array (&$SL, ‘addHeader’ ));

  2. 银月闪舞

    如何移除Action?
    remove_action(‘action_hook’,’action_function’)
    对应删除 这个add_action(“wp_head”,array (&$SL, ‘addHeader’ ));
    是不是可以这样写remove_action(“wp_head”,array (&$SL, ‘addHeader’ ));
    另外对于add_action()的第二个参数,自定义函数名,有些不解,这个是wp里的需要这样定义才这样写吧

    明河共影回复于 2010年06月18日 11:49

    恩,写法正确。第二个参数就是你要执行的方法名,比如array (&$SL, ‘addHeader’ ),就是执行$SL-> addHeader()

  3. abx

    先看看你推荐的那本书我再来看你的教程

  4. ShunYea

    您好,这个插件很喜欢,只是我想问一下怎么才能设置显示位置呢?我不想显示在文章尾部,我想自定义,改代码也行,能请教一下吗?谢谢。

    明河共影回复于 2010年10月28日 9:42

    你好, ShunYea ,请访问http://www.36ria.com/2672,文章中我有做了说明。如果你还有疑问,可以继续给我留言。

    ShunYea回复于 2010年10月30日 12:59

    @明河共影, 非常感谢这位大哥,我没认真看,继续研究中!

  5. Jauia

    您好明河..
    现在我要开发个插件..
    主体部分已经写好,但是后台添加菜单那几项不会..
    能否出个更详细点的教程?
    谢谢?或者能否留个QQ号,指导我一下..谢谢.
    mail: me[at]jauia.com

    明河共影回复于 2011年02月26日 11:40

    呵呵,可以看下《插件开发全攻略》:http://www.36ria.com/2460,里面有讲到如何处理后台配置,实际上就是添加个钩子。