精华内容
下载资源
问答
  • wordpress 插件开发

    2020-11-09 09:45:19
    插件开发 <?php /* Plugin Name: 插件名 Plugin URI: 插件的介绍或更新地址 Description: 插件描述 Version: 插件版本,例如 1.0 Author: 插件作者名称 Author URI: 插件作者的链接 License: A "Slug" license ...

    插件开发

    <?php
    /*
    Plugin Name: 插件名
    Plugin URI: 插件的介绍或更新地址
    Description: 插件描述
    Version: 插件版本,例如 1.0
    Author: 插件作者名称
    Author URI: 插件作者的链接
    License: A "Slug" license name e.g. GPL2
    */
    ?>
    

    WordPress插件钩子

    许多WordPress插件通过连接一个或多个WordPress插件钩子来完成他们的功能。插件钩子的运行机理是,当WordPress运行到不同阶段,WordPress会检查当前阶段是否注册了插件函数,如果是,那么函数将被执行。通过执行插件函数改变了WordPress的默认功能。

    例如,在WordPress将日志标题和post发送到浏览器前,会检查是否有插件函数注册了名为“the_title”的“filter”钩子。如果是,标题文本将会传送到注册函数中,注册函数返回值将会传送到浏览器。所以,如果要在日志标题中加入一些信息,可以通过这种方式实现。

    另一个例子是名为“wp_footer”的“action”钩子。在WordPress的HTML页脚创建之前,会检查是否有插件注册了名为“wp_footer”的“action”钩子,如果是依次执行她们。

    模版标签

    另一个通过插件加入新功能的方法是建立自定义的模版标签Template Tags。如果有人想用你的插件,可以在他们的主题中添加这些标签,边栏,文章内容段,或者任意的只要是适合这插件的地方。例如,一个给文章添加地理位置的插件可能定义了一个模板标签函数geotag_list_states()放在边栏上,这里列表了所有在文章中关联的州的名称,并且还带有插件提供的到这些州的文档页的链接。

    定义一个自定义模板标签,仅需要写一个PHP函数,并且在你插件主页或者插件的主PHP文件中声明一下。声明函数的时候,为这个函数提供一个示例来明确如果想要应用这个函数需要加主题中加些什么文件是个相当棒的主意。

    展开全文
  • wordpress插件开发

    2013-07-06 18:05:06
    由于工作需要,需要了解下wordpress插件开发,百度了一下找到个教程。地址是这个http://blog.csdn.net/ruby97/article/details/7709872。 1 一些基本概念 插件机制是由Hook系统实现。使用Hook,插件开发者可以...

    由于工作需要,需要了解下wordpress插件的开发,百度了一下找到个教程。地址是这个 http://blog.csdn.net/ruby97/article/details/7709872

    1 一些基本概念


    插件机制是由Hook系统实现。使用Hook,插件开发者可以在文档(HTML)被浏览器渲染之前对其进行修改,或者可以在某个事件发生时做一些事情。
    大多数WordPress插件API都是由以下两大基本元素构成:
    • Actions
    • Filters

    Actions
    事件驱动,特定事件发生时,比如:保存一篇Post,加载一个Admin Page或者向浏览器发送HTML;插件有能力Hook到这些事件中同时创建它们自己的事件。举个例子,一个插件可以在Post被保存的时候去Ping一台服务器,又或者一个插件可以在用户信息更新的时候自动更新该用户在社交网络上的信息。

    Filters
    用于修改内容。被修改的内容可以是:一篇Post的文本,作者的名字,从数据库中获取的一个Option值等等。举个例子:一个插件可以使用第三方的头像去修改用户的头像。比如根据该用户的名字然后从Twitter上获取该名字用户的头像。

    从上面的说明可以看出,Filters是数据处理的过程,有输入也有输出。而Actions是基于事件的机制,它不需要进行数据处理。

    ---------------------------------------------分割线-----------------------------------------------


    Hook结构


    调用Hook

    · add_action() 

    ·  add_filter()

    移除Hook

    · remove_action()

    · remove_filter()


    以上参数最基本的使用方法,共四个参数:

    · 第一个是Hook的名字,比如 save_post 或者 the_content


    · 第二个参数是你想要传给该Hookcallback,比如 insert_author_description或者add_google_analytics。通常情况下,第二个参数是由插件或者主题的 functions.lphp提供,当然也可以是Wordpress自带函数。

           即:
               add_action(pre_post_save’,‘function_name);
           如果使用面向对象编程:
              add_action(pre_post_save,array(class_name,method_name));

    此外,上述几个函数还有第三,第四参数。

    · 第三个参数是优先级,该参数是一个整数,数值越小表示优先级越高,默认值为10.

    · 第四个参数是一个数值,表示向callback传递的参数的个数。具体参考官方文档。


    下面,我们开始写一个自己的插件

    1. wp-content/plugins/下面建一个文件夹,文件夹名称与插件名称相同。比如,我创建的插件名字是copyright-notices

    2. 进入copyright-notices文件夹,在其中创建文件copyright-notices.php

    其中文件注释部分格式如下:

    /*

    Plugin Name: 插件名

    Plugin URI: 插件的介绍或更新地址

    Description: 插件描述

    Version: 插件版本,例如 1.0

    Author: 插件作者名称

    Author URI: 插件作者的链接

    License: A "Slug" license name e.g. GPL2

    */


    <?php

    /*

        Plugin Name: copyright-notices

        Plugin URI: 测试

        Description: 第一个插件

        Version: 1.0

        Author: jack

        Author URI: http://www.wpdaxue.com/

        License: A "Slug" license name e.g. GPL2

    */

    ?>


    写好后,保存,我们就可以在wp-adminPlugins中看到我们的插件了。


    开发插件后台管理界面


    开发插件的后台管理界面是必要的。这样插件的使用者就可以通过界面来修改插件的配置参数,而无需手动编辑插件的代码。对于插件的配置参数,最好把他们存放在数据库中,而不是硬编码于插件的php代码中。
    幸运的是,Wordpress提供了大量的functionhook来帮助我们创建后台管理界面。下面结合实例来说明。


    · Step1 创建后台界面

    创建Copyright插件的第一步就是创建一个函数来产生HTML代码,用于在后台使用。

    function copyright_notices_admin(){

            ?>

            <div class="wrap">

                <?php screen_icon();?>

                <h2>Copyright Notices Configration </h2>

                <p>On this page,you will configration all the aspects of this plugins</p>

                <form action="" method="post" id="copyright-notices-conf-from" >

                    <h3>

                        <label for="copyright_text">

                            Copyright Text to be inserted in the footer of you theme

                        </label>

                    </h3>

                    <p>

                        <input type="text" name="copyright_text" id="copyright_text" value="<?php echo esc_attr(get_option('copyright_notice_text')); ?>">

                    </p>

                </form>

            </div>

        <?php

        }

    ?>

    · Step2 在后台管理界面中添加插件配置入口


    明白了吧?我要的就是在后台Plugins菜单项中可以看到我自定义的插件的名字。这样我点击该插件的Panel,就进入了上述的配置页面。

    那么,这应该如何实现呢?


    这里,要用到函数 add_submenu_page(),该函数需要6个参数:
    • $parent 父页面的文件名,比如plugins.php
    • $page_title 你要添加的页面名称
    • $menu_title 
    • $access_level 访问权限
    • $handle 
    • $callback 用于初始化页面的函数
    (具体还是看官方文档)


    下面,看如何编写代码:

    function copyright_notices_admin_page(){

            add_submenu_page('plugins.php','Copyright Notice Configuration','Copyright Notices Configuration','manage_options','copyright-notice','copyright_notices_admin');

        }

    add_action('admin_menu','copyright_notices_admin_page');


    • Step3 给插件表单添加随机数项(为了安全性)

    修改后的copyright_notices_admin如下所示:

    function copyright_notices_admin(){
    		?>
    		<div class="wrap">
    			<?php screen_icon();?>
    			<h2>Copyright Notices Configration </h2>
    			<p>On this page,you will configration all the aspects of this plugins</p>
    			<form action="" method="post" id="copyright-notices-conf-from" >
    				<h3>
    					<label for="copyright_text">
    						Copyright Text to be inserted in the footer of you theme
    					</label>
    				</h3>
    				<p>
    					<input type="text" name="copyright_text" id="copyright_text" value="<?php echo esc_attr(get_option('copyright_notice_text')); ?>">
    				</p>
    				<p class="submit">
    					<input type="submit" name="submit" value="Update options »">
    				</p>
    				<?php wp_nonce_field('copyright_notices_admin_options-update');?>
    			</form>
    		</div>
    	<?php
    	}
    • Step4 处理数据并与数据库交互
    现在,我们需要把表单添加到数据库中了。为了实现该功能,我们首先要验证请求的合法性(即上一步中的随机数)。验证方法如下:

    if(wp_verify_nonce($_POST['_wpnonce'],'copyright_notices_admin_options-update')){
    					update_option('copyright_notice_text',stripslashes($_POST['copyright_text']));
    					echo '<div class="updated" ><p>'.__('Success! you change were successfully saved!').'</p></div>';
    				}else{
    					echo '<div class="error" ><p>'.__('whoops! there was a problem with the data you posted.please try again!').'</p></div>';
    				}

    按照上述做法,在跨站请求伪造条件下(Cross Site Request Forgery),验证将失败,然后什么也不会发生。如果验证通过,就可以使用update_option()来修改值了。


    现在,修改完成的copyright_notices_admin()函数如下所示:

    function copyright_notices_admin(){
    			if(isset($_POST['submit'])){
    				if(wp_verify_nonce($_POST['_wpnonce'],'copyright_notices_admin_options-update')){
    					update_option('copyright_notice_text',stripslashes($_POST['copyright_text']));
    					echo '<div class="updated" ><p>'.__('Success! you change were successfully saved!').'</p></div>';
    				}else{
    					echo '<div class="error" ><p>'.__('whoops! there was a problem with the data you posted.please try again!').'</p></div>';
    				}
    			}
    		?>
    		<div class="wrap">
    			<?php screen_icon();?>
    			<h2>Copyright Notices Configration </h2>
    			<p>On this page,you will configration all the aspects of this plugins</p>
    			<form action="" method="post" id="copyright-notices-conf-from" >
    				<h3>
    					<label for="copyright_text">
    						Copyright Text to be inserted in the footer of you theme
    					</label>
    				</h3>
    				<p>
    					<input type="text" name="copyright_text" id="copyright_text" value="<?php echo esc_attr(get_option('copyright_notice_text')); ?>">
    				</p>
    				<p class="submit">
    					<input type="submit" name="submit" value="Update options »">
    				</p>
    				<?php wp_nonce_field('copyright_notices_admin_options-update');?>
    			</form>
    		</div>
    	<?php
    	}

    下面,我们进入后台:



    输入自定义的Copyright Text,然后提交:


    OK,为了确定该数据已经存在了数据库中,我们进入数据库,查看options表:


    可以看到,该数据已经写入了wp_options表中。


    使用插件

    • Step1 Createing Events with Actions
    我们已经创建了Admin Panel并把copyright text存放到了数据库中。现在,我们可以在WordPress中使用我们的插件了。
    首先,我们需要写一个函数来显示Copyright Text。下面代码都是添加到wp-includes\theme.php最下面 

    function display_copyright(){
    	if($copyright_text=get_option('copyright_notice_text')){
    		echo '<p class="copyright_text">'.$copyright_text.'</p>';
    	}
    }

    由于我们需要使用action hook来实现功能,故写如下代码:


    add_action(‘wp_footer’,’display_copyright’);

    然后,把主题中Home.php文件的 <?php get_footer() ?> 改为 <?php wp_footer() ?>

    主题用的是

    Twenty Eleven,其他的没测试过!

    就可以看到结果了:


    可以看到fanwe.

    • Step2 Modifying Content with Filters
    所有Filter,就是过滤器。顾名思义,数据有进亦有出。看下面这个函数:
    function display_copyright_home($post_content){
    	if(($copyright_text=get_option('copyright_notice_text'))&&is_home()){
    		return $post_content.$copyright_text;
    	}
    	return $post_content;
    }
    add_filter('the_title','display_copyright_home');

    这样,如果是Home.php,即主页,将在所有显示的title后面加上copyright字符串,显示结果如下:


    看到标题后面都加了fanwe。

    到此一个简单插件就做好了。




    展开全文
  • 我们介绍如何开发一个Wordpress插件,需要的朋友可以参考下
  • 本文是《WordPress 插件开发教程》系列教程的第 1 部分,该系列共包含以下 4 个部分:WordPress 插件开发教程 Part 1 – WordPress 插件简介WordPress 插件开发教程 Part 2 – WordPress 插件基础WordPress 插件开发...
    本文是《 WordPress 插件开发教程》系列教程的第 1 部分,该系列共包含以下 4 个部分:
    1. WordPress 插件开发教程 Part 1 – WordPress 插件简介
    2. WordPress 插件开发教程 Part 2 – WordPress 插件基础
    3. WordPress 插件开发教程 Part 3 – 钩子( Hooks )
    4. WordPress 插件开发教程 Part 4 – 与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_mail() 函数就是一个”插件函数”。你可以在你的插件中定义这个函数,然后使用 SMTP 而不是默认的方法来发送邮件。所有的”插件函数”都定义在 /wp-includes/pluggable.phpCore 文件中。在特定的插件任务过程中,你可以使用一些预定义的函数,例如当一个插件启用或者停用或者删除插件的时候。在第二章: 插件基础, 中将详细介绍

    插件什么时候加载

    wpdaxue.com-201303495

    插件在 WordPress 页面调用之前加载。

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

    可用的插件

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

    官方插件下载地址

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

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

    热门插件

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

    • All in One SEO Pack — 为 WordPress 提供高级的搜索引擎优化( SEO )的功能。包括为所有的内容提供自定义的 meta 数据,规范的 URL,自定义提交类型( post type )支持,等等。

      http://wordpress.org/extend/plugins/all-in-one-seo-pack/

    • Google XML Sitemaps — 为提交到搜索引擎的内容生成一个 XML 网站地图。

      http://wordpress.org/extend/plugins/google-sitemap-generator/

    • Akismet — 流行的垃圾评论( spam )过滤器。通过 Akismet 网站的服务检查么一个评论是否是垃圾评论。WordPress 默认安装此插件。

      http://wordpress.org/extend/plugins/akismet/

    • NextGEN Gallery — 未 WordPress 提供高级的相册支持。使你能够方便的创建和管理相册( gallery )以及幻灯片( slide show )。相册可以添加在文章( posts ) 以及页面( pages )中。

      http://wordpress.org/extend/plugins/nextgen-gallery/

    • Contact Form 7 — 为任何一个文章或者页面添加联系表单( form )。支持多表单,Akismet 评论过滤,以及验证码( CAPTCHA )。

      http://wordpress.org/extend/plugins/contact-form-7/

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

    使用插件的优势

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

    不修改核心

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

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

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

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

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

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

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

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

    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 所示。

    wpdaxue.com-201303496

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

    安装插件

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

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

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

    wpdaxue.com-201303497

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

    管理插件

    编辑插件

    扩展阅读《WordPress入门 之 安装主题和插件

    插件目录

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

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

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

    插件的类型

    wpdaxue.com-201303498

    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 中如何工作,我们是时候开始编写插件了!

    注:本文出自《Professional WordPress Plugin Development》一书,由 sixpoint.me 翻译,倡萌整编。

    展开全文
  • 本文是《WordPress 插件开发教程》系列教程的第 2 部分,该系列共包含以下 4 个部分:WordPress 插件开发教程 Part 1 – WordPress 插件简介WordPress 插件开发教程 Part 2 – WordPress 插件基础WordPress 插件开发...
    本文是《 WordPress 插件开发教程》系列教程的第 2 部分,该系列共包含以下 4 个部分:
    1. WordPress 插件开发教程 Part 1 – WordPress 插件简介
    2. WordPress 插件开发教程 Part 2 – WordPress 插件基础
    3. WordPress 插件开发教程 Part 3 – 钩子( Hooks )
    4. WordPress 插件开发教程 Part 4 – 与WordPress整合

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

    • 创建一个可靠的插件基础
    • 确定目录和文件的路径
    • 使用“启用”( 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 管理员界面时有条件的包含管理员代码。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    <?php
     
    if( is_admin() ) {
     
    // 在 wp-admin 里面
     
    require_once( dirname( __FILE__ ).'/includes/admin.php' );
     
    }    
     
    ?>

    上面的例子使用 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 这是一个有效的插件。

    创建头部

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    <?php
     
    /*
     
    Plugin Name: My Plugin
     
    Plugin URI: http://example.com/wordpress-plugins/my-plugin
     
    Description: 插件的详细说明
     
    Version: 1.0
     
    Author: Lexo Charles
     
    Author URI: http://sixpoint.me
     
    License: GPLv2
     
    */
     
    ?>

    WordPress 只需要 Plugin Name 这一行就可以识别插件,不过最好是像上面一样填写详细的信息。

    Plugin URI 是连接到你的插件的详细内容的网页的链接。Description 是插件的简短描述。Version 是当前插件的版本。WordPress 使用这里设置的版本号来检查插件在 wordpress.org 的更新。下面两行是 Author – 作者,和 Author URI – 作者的网站。最后一行是这个插件发布所遵照的许可证。

    插件许可证

    在插件头部的注释块中,最好包含你的插件的版权。对于插件的功能来说,这不是必须的,但是任何时候你发布代码,都最好包含版权信息。这是你的用户知道你的插件的版权是什么,以及他们可以如何使用你的插件。part-17:插件营销中,我们会详细讨论这个话题。

    WordPress 的版权是 GPL 软件版权所以任何 WordPress 的插件都要是和 GPL。 下面是一段 GPL 版权注释块的示例。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    <?php
     
    /* Copyright YEAR PLUGIN_AUTHOR_NAME (email : PLUGIN AUTHOR EMAIL)
     
    This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
     
    This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
     
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
     
    You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
     
    */
     
    ?>

    只用填上年份,插件作者名,以及 email 就可以了。然后把这段注释放在插件的头部。这样你的插件就急于 GPL 版权协议了。

    确定目录结构

    通常你要确定你的插件的目录和文件结构。例如,图片都放在 images 文件夹下。一般来说,最好在插件中硬编码一个目录结构。WordPress 可以被配置运行在许许多多的情形下,所以目录结构说不定就是个错误。这部分介绍确定目录和文件结构的合适的方法。

    插件路径

    最基本的事情就是把你的文件和目录引入到 WordPress 的安装中。要引入文件有两种方法:使用本地服务器路径,或者使用标准的 URL。

    本地服务器路径就是计算机的目录。本地服务器路径通常在你要包含在你本地服务器上的内容时使用。URL 则通常用来连接你的服务器外部的内容,不过这并不是说你就不能用 URL 来连接本地服务器上的内容了。

    WordPress 支持把 wp-content 目录移动到不同的位置。由于这个原因,在 WordPress 中你不应该硬编码目录,而应该用可用的函数来确定正确的路径。

    本地路径

    插件开发中有一个常见问题:确定你的插件文件的本地路径的合适方法是什么?要确定你的插件的本地路径,应该使用 plugin_dir_path() 函数。 plugin_dir_path() 函数从它的文件名中提取和插件目录对应的物理地址。

    1
    
    <?php plugin_dir_path($file); ?>

    参数:

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

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

    1
    2
    3
    4
    5
    
    <?php
     
    echo plugin_dir_path(__FILE__);
     
    ?>

    把 PHP 常量 __FILE__ 传递给了 plugin_dir_path() 函数。这会生成指向你的插件目录的完整的本地路径。

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

    如何得到在你插件目录下的子目录中文件的本地路径呢?同样可以使用 plugin_dir_pah() 函数并加上子目录和文件名:

    1
    2
    3
    4
    5
    
    <?php
     
    echo plugin_dir_path(__FILE__).'js/scripts.js';
     
    ?>

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

    /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
    
    <?php plugins_url( $path, $plugin ); ?>

    参数:

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

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

    1
    
    <?php echo '<img src="'.plugins_url('images/icon.png', __FILE__). '"/>';?>

    第一个参数是要用到的图片文件的相对路径。第二个参数是要取相对路径时的参考文件,本例中直接是 —__FILE__。上面的代码会生成下面的 HTML 标签:

    1
    
    <img src="http://example.com/wp-content/plugins/my-custom-plugin/images/icon.png"/>

    下面是使用 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
    
    <?php register_activation_hook( $file, $function ); ?>

    参数:

    • $file — (string)(必须) — 主插件文件的路径。
    • $function — (string)(必须) — 当插件启用时要执行的函数。

    下面是一个例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    <?php
     
    register_activation_hook( __FILE__, 'boj_myplugin_install');
     
    function boj_myplugin_install() {
     
    // 启用时要做的事情
     
    }
     
    ?>

    第一个参数是插件的路径,使用了 __FILE__ 常量。这个一个 PHP 自带的常量,指向调用它的文件的 绝对路径。第二个参数是唯一的一个函数名。

    知道了 register_activation_hook() 函数的用处后,我们看一个真实的例子。下面的例子用来验证 WordPress 的版本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    <?php
     
    register_activation_hook( __FILE__, 'boj_install');
     
    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() 函数来 禁用插件。

    在启用时进行默认设置

    另一个常用的启用技术就是在你的插件启用时为它设置默认选项。假设你的插件有许多许多选项,也许有一些选择需要被设置才能保证插件正常工作。你可以再启动时自动设置默认值,而不用让用户跑到设置页面来亲自设置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    <?php
     
    register_activation_hook( __FILE__, 'boj_install');
     
    function boj_istall() {
     
    $boj_myplugin_options = array(
     
    'view' => 'grid',
     
    'food' => 'bazon',
     
    'mode' => 'zombie'
     
    );
     
    update_option( 'boj_myplugin_options', $boj_myplugin_options );
     
    }
     
    ?>
     
    }

    上面的代码在你插件启用时生成了一个包含默认值的数组并把它们存到 WordPress 中。在 part-7,”插件设置” 中将详细介绍创建和保存插件选项。

    插件 deactivation (禁用)函数

    和启用函数类似,同样有禁用函数。叫做 register_deactivation_hook() 函数。这个函数在插件被禁用时触发。这个函数和前面的启用函数一页同样接收两个参数。

    1
    
    <?php register_deactivation_hook( $file, $function ); ?>

    参数:

    • $file — (string)(必须) — 主插件文件的路径。
    • $function — (string)(必须) — 当插件禁用时要执行的函数。

    下面是一个例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    <?php 
     
    register_deactivation_hook( __FILE__, 'boj_myplugin_uninstall' );
     
    function boj_myplugin_unstall() {
     
    // 执行内容
     
    }
     
    ?>

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

    禁用 != 卸载

    在处理禁用的时候,不应该包含卸载插件的功能。因为禁用了还可以重新启用的,但卸载(删除)就不一样了。注意:WordPress 在自动更新的时候,会先禁用所有的插件,然后再安装 WordPress 的新版本。

    卸载的方法

    为插件提供卸载功能可以方便的删除掉插件添加到 WordPress 中的数据。这应该是每个插件的必须部分。这不会带来多少工作量,但是可以让用户来选择是否完全删除它。

    为什么卸载是必须的?

    想像一下插件是安装到你电脑中的一个软件。你就希望这个软件有个非常方便的卸载的方法。你同样希望可以彻底卸载该软件的所有内容。WordPress 中的插件也是同样的意思,实质就是安装在 WordPress 中的软件。如果用户希望删除这个插件,你应该为用户提供从 WordPress 中彻底删除它的功能。

    关心插件用户的数据是一个良好的规则。例如如果你的插件建立事件作为自定义文章类型,也许用户希望卸载插件,但并不希望删除他们所有的事件。因此你或许希望询问用户是否要删除他们的数据。

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

    uninstall.php

    第一种方法:uninstall.php 文件。这是典型的流行方法,因为它把你所有的卸载代码放在一个独立的文件中。要使用这个方法,创建一个 uninstall.php 文件并放置在插件的根目录。如果这个文件存在,WordPress 会在插件被删除的时候执行这个文件的代码。下面是使用 uninstall.php 文件的一个例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    <?php
     
    // 如果 uninstall 不是从 WordPress 调用,则退出
     
    if( !defined( 'WP_UNINSTALL_PLUGIN' ) )
     
    exit();
     
    // 从 options 表删除选项
     
    delete_option( 'boj_myplugin_options' );
     
    // 删除其他额外的选项和自定义表
     
    ?>

    第一件要做的事就是验证确实是 WordPress 在调用 uninstall.php 文件。通过严重 WP_UNINSTALL_PLUGIN 常量是否定义。如果没有,立即退出。这是一个保证只有在删除插件时才能够执行 uninstall.php 文件的安全的方法。

    在验证了这是合法的卸载调用以后,就可以从数据库中删除插件的设置项了。插件卸载脚本的目的是要从数据库中删除任何与插件相关的内容。这包括删除所有选项,已经删除所有自定义的表。你不需要操心删除插件的文件或者目录的事情,一旦卸载脚本执行了,WordPress 会自动为你做这些事情。

    卸载钩子

    第二种可用的卸载方法叫做卸载钩子。如果你删除一个不存在 uninstall.php 的插件,WordPress 会执行卸载钩子(如果存在的话).

    1
    
    <?php register_uninstall_hook( $file, $function ); ?>

    参数:

    • $file — (string)(必须) — 插件主文件的路径
    • $function — (string)(必须) — 在插件卸载后要执行的函数

    下面看卸载函数的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    <?php
     
    register_activation_hook( __FILE__, 'boj_myplugin_activate' );
     
    function boj_myplugin_activate() {
     
    // 注册卸载函数
     
    register_uninstall_hook( __FILE__, 'boj_myplugin_uninstaller' );
     
    }
     
    function boj_myplugin_uninstaller() {
     
    // 删除插件创建的选择,表等等
     
    delete_option( 'boj_myplugin_options' );
     
    }
     
    ?>

    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 格式的函数注释:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    <?php
     
    /**
     
    * Short description
     
    *
     
    * Longer more detailed description
     
    *
     
    * @param type $varname1 Description
     
    * @param type $varname2 Description
     
    * @return type Description
     
    */
     
    function boj_super_function( $varname1, $varname2 ) {
     
    // 函数内容
     
    }
     
    ?>

    上面的 PHPDoc 注释直接在注释块中描述函数的功能。如果一个开发者查看你的插件的代码,他不用看函数的代码也可以很快可以明白你的函数的功能,接受什么参数,返回什么结果。这些注释也被许多可视化软件使用,例如 PHPDocumentor 和 PHPXref。

    变量、函数和文件的命名

    变量和函数名应该全部小写。代词应该用下划线来分割。下面是函数和变量命名的正确方法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    <?php
     
    function boj_myplugin_function_name ( $boj_myplugin_variable ) {
     
    // do something
     
    }
     
    ?>

    文件名同样应该只使用小写字母,不过,文件名应该用连字号”-”来分割单词,而不要用下划线。例如你应该这样命名插件文件:boj-plugin-name.php

    单引号 v.s. 双引号

    PHP 同时允许使用单引号或者双引号来定义字符串。WordPress 中推荐在可能的情况下尽量使用单引号。使用单引号的一个好处这样你就很少需要在字符串中去避免 HTML 的引号。下面是使用单引号来输出一个超链接的方法的例子:

    1
    2
    3
    4
    5
    
    <?php
     
    echo '<a href="http://example.com/" > 访问 example.com </a> ';
     
    ?>

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

    1
    2
    3
    4
    5
    6
    7
    
    <?php
     
    $boj_myplugin_website = 'http://example.com/';
     
    echo " <a href='$boj_myplugin_website' > 访问 example.com </a> ";
     
    ?>

    把 $boj_myplugin_website 变量设置成你想包含在 HTML 超链接中的 URL。然后把这个字符串连接到 echo 语句中的网站 URL 中。

    缩进

    缩进应该反映代码的逻辑结构。这意味着在缩进时使用 tab 而不是空格。下面是很差的 if 语句缩进的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <?php
     
    if ( 条件 ) {
     
    echo 'Yes';
     
    } elseif ( 条件2 ){
     
    echo 'No';
     
    }
     
    ?>

    上面代码的逻辑很难体现出来,因为没有反应 if 语句代码逻辑结构的缩进。下面是使用合理缩进的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <?php
     
    if ( 条件 ) {
     
    	echo 'Yes';
     
    } elseif ( 条件2 ){
     
    	echo 'No';
     
    }
     
    ?>

    注意如何使用合适的缩进来使得代码的逻辑更显而易见。你可以简单的跳过这段内部代码而直接明白这些语句的结果。这就是为什么你的所有代码都必须有合适的缩进。

    括号格式

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    <?php
     
    if ( condition ) {
     
    	action1();
     
    	action2();
     
    }  elseif ( condition2 || condition3 ) {
     
    	action3();
     
    	action4();
     
    }  else {
     
    	defaultaction();
     
    }
     
    ?>

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    <?php
     
    if ( condition ) {
     
    	action1();
     
    	action2();
     
    }  elseif ( condition2 || condition3 ) {
     
    	action3();
     
    	action4();
     
    }  else {
     
    	defaultaction();
     
    } // end of condition check
     
    ?>

    空格的使用

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    
    <?php
     
    if ( $foo == 34 ) {
     
    // do something
     
    }
     
    foreach ( $foo as $bar ) {
     
    //  do something
     
    }
     
    $foo = array( 34, 16, 8 );
     
    function super_function( $param1 = 'foo', $param2 = 'bar' ) {
     
    // do something
     
    }
     
    ?>

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

    PHP 简写

    你不应该在代码中使用 PHP 标签的简写形式 ( <? ?> )。因为简写形式要起作用必须在服务器中开启。许多主机的配置,该选项是被禁止的,这样你的代码直接就崩溃了。所以应该使用标准的标签形式:

    1
    
    <?php ?>

    SQL 语句

    在操作数据库时,你可能会用到 SQL 语句。复杂的 SQL 语句可以分成多行来写。尽管 SQL 语句是大小写不敏感的,最好还是把 SQL 命令写成大写形式。

    1
    
    SELECT username FROM table1 WHERE status = 'active'

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

    插件开发检查列表

    在开发 WordPress 插件时,你需要记住许多事情来创建一个合适的插件基础。下面的列表帮助你完成这个过程。跟随这个列表,你就可以确保有一个合适的插件基础了:

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

    总结

    本章讨论了在进行 WordPress 插件开发时建立一个合适的插件基础。遵循这些步骤是建立跨各种版本的 WordPress 插件的精髓。保持合适的代码文档同样是描述插件功能的重要步骤。这会在你今后升级代码的时候节省时间。这也同样会帮助其他开发者明白你的代码逻辑。

    注:本文出自《Professional WordPress Plugin Development》一书,由 sixpoint.me 翻译,倡萌整编。

    展开全文
  • wordpress插件开发WordPress, the most popular content management system in the world, is built on a structure that allows users to supplement core functionality with themes that provide visual designs ...
  • 撰写此文提供技术支持 PAGE PAGE 1 Wordpress插件开发教程-1 WordPress插件Wordpress plugin 开发教程1本文介绍了如何什么是Wordpress插件以及Wordpress插件的开发 WordPress 插件可以在不修改Wordpress核心程序的...
  • wordpress 插件开发指南

    2011-05-12 09:22:06
    wordpress 插件开发指南,英文版。详细介绍了wordpress各类插件/小工具开发。
  • wordpress插件 模板开发开发是子恒老师《实用技能》视频教程的第4部。详细讲解了wordpress开发过程,内容包含wp插件,模板开发之间的区别和联系,插件开发流程,使用wordpress ui jQuery, 保存和获取数据等等。欢迎...
  • WordPress插件开发设计

    2021-01-20 16:42:03
    如果你也想学习如何制作WordPress主题创造出精美的设计,这里有几款插件可以帮助你出色地完成WordPress设计的开发:  1. 主题开关和预览(Theme Switch & Preview)  Nicolas Kuttler制作的这款插件可以在线预览模板...
  • 面向对象的 WordPress 插件开发 我对将 OOP 实践纳入 WordPress 插件开发的想法。 请记住,这只是我作为主要非 WP 开发人员的想法。 工作正在进行中! 反馈可以作为问题发布!
  • 用Angular开发Wordpress插件 :mechanical_arm: Cookie插件 :... 这是我在学生的Angular Wordpress插件开发课程中为学生制作的Wordpress插件,您可以在Udemy上找到它。 作者 :sparkles: guillaumeduhan-初始工作
  • 使用JQuery的Wordpress插件开发 :mechanical_arm: Cookie插件 :package: WordPress,jQuery v1.0.0 欢迎使用Cookie插件的存储库。 这是我在我的课程“使用JQuery进行Wordpress插件开发”中为学生制作的Wordpress...
  • 本文是《WordPress 插件开发教程》系列教程的第 4 部分,该系列共包含以下 4 个部分:WordPress 插件开发教程 Part 1 – WordPress 插件简介WordPress 插件开发教程 Part 2 – WordPress 插件基础WordPress 插件开发...
  • 一个有据可查的入门插件,可用于快速WordPress插件开发,并带有内联文档和有效的管理员选项页面。 目录结构 / admin /-插件后端的东西。 / functions /-函数和插件操作。 / includes /-外部第三方类和库。 / ...
  • wordpress 插件开发cookbook, WORDPRESS_PLUGIN_DEVELOPMENT_COOKBOOK
  • 使用React的Wordpress插件开发 :mechanical_arm: Cookie插件 :package: WordPress,React v1.0.0 欢迎使用Cookie插件的存储库。 这是我在我的课程“使用React实现Wordpress插件开发”中为学生制作的Wordpress插件...
  • # WORDPRESS插件开发 #–WP2WPQAQ 插件是一个根据WordPress中的xmlrpc进行编写的实现两个WordPress站点进行文章同步的插件。目前该插件实现了文章的同步,媒体文件上传(上传到媒体库),但是分类(category),标签...
  • 带有示例的WordPress插件样板教程 这是一个带实例的教程 现在您可以安装插件了,我将实现所有功能。 这是一个带有示例的教程插件。 我创建了一些教程来帮助我的工作,我想,我会分享这些以帮助他人。 还会有更多.....
  • 本文是《WordPress 插件开发教程》系列教程的第 3 部分,该系列共包含以下 4 个部分:WordPress 插件开发教程 Part 1 – WordPress 插件简介WordPress 插件开发教程 Part 2 – WordPress 插件基础WordPress 插件开发...
  • 随时可用的WordPress插件可轻松将React JS集成到WordPress插件开发中。 您可以创建JSX组件并将其转换为WordPress将加入的Javascript。 要求 全局安装模块打包器Webpack v4 +,webpack-cli。 npm install -g ...
  • wordpress插件开发01-原理讲解

    千次阅读 2018-07-08 12:15:00
    这节课,我们来学习wordpress插件开发的原理。 如何让wordpress认识一个插件 wordpress中做插件的方式和做主题开发的方式是非常类似的。就像我们做主题时必须要有index.php和style.css一样。 wordpress插件里面也...
  • WordPress插件开发教程1

    万次阅读 2012-07-02 22:00:19
    WordPress插件开发 基本概念 插件机制是由Hook系统实现。使用Hook,插件开发者可以在文档(HTML)被浏览器渲染之前对其进行修改,或者可以在某个事件发生时做一些事情。 大多数WordPress插件API都是由以下两...
  • [PACKT]最新出品,WordPress插件开发新手指南。
  • 在本课程中,我们将了解构建 WordPress 插件所需的一切。 我们将从头开始设置 Web 服务器、数据库服务器和 PHP。 接下来,我们将安装 WordPress,然后我们将研究与该软件捆绑在一起的一些示例插件。 从那里,我们将...
  • A low learning curve into WordPress plugin development means that there is no one definitive way to build a plugin. A plugin can be as simple as a single file like Hello Dolly, or it can be structured...
  • 如果您想学习编写自己的WordPress插件的代码,则应尝试我们的新课程“ 学习WordPress插件开发的3个更多实用项目” 。 在本课程中,与经验丰富的WordPress开发人员Rachel McCollin一起 ,您将创建三个实用项目,以...
  • 一组用于加快 WordPress 插件开发的启动文件。 这个项目归功于 Tom McFarlin 的 Plugin Boilerplate 项目。 虽然不是直接分叉或对其进行改造,但该项目是一个起点,并提供了一些我喜欢的东西。 但它已经足够了,我...
  • 首先我们必须明白,wordpress插件可以是单文件,也可以是多文件,css/html都不是必须的,以下举例暂且在单文件模式下 比如我们要创建一个名为 hellophp的插件,那我们就需要在wp-content/plugins目录下新建hello...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,026
精华内容 6,810
关键字:

wordpress插件开发