wordpress 钩子怎么用

在开始之前,需要注意三件事情

I、给插件取一个个*化的名字,越个*化越好,以防和其他插件重名冲突。

II、代码里面,一定要包含注释,不为自己,也要为想修改你代码的别人想想。

III、尽量用**版的 WordPress进行开发和测试。

插件名称和插件结构

一般来说,都是在 wp-content\plugins目录下建立一个文件夹,文件夹名就是插件的名称,我们插件名字为"copyright_plugin",文件结构如下。

\wp-content\plugins\copyright_plugin下有copyright_plugin.php和readme.txt

这里的 readme.txt文件中包含了一些插件的介绍,使用说明等信息,主要是提交到 WordPress**网站时候用到的,可以参考他们给的模板,另外还有插件截图预览的功能,需要另外添加图片,但是我们现在是练习,不需要提交到**,所以暂时先不涉及这些。

插件的核心

总的来说,插件的核心是两个 function,用来添加 Hooks(中文译为钩子)

add_action($hookname,$callbackfunction)

add_filter($hookname,$callbackfunction)

这两个方法相当重要,几乎所有的插件都要用到他们。

Actions,我理解就是 wordpress核心代码预留的一些特殊的切入点,或者说是在执行一些特定**时候发生,例如文章发布时,或者访客留言时触发。

Filters,应该就是 wordpress执行时,对数据传输过程的一种过滤机制,例如当文章保存到数据库的过程,或者文章从事数据库中取出,展现到浏览器中的这个过程。

我们今天要制作的插件,应该是用 Filters,因为我们要在文章显示在浏览器之前,在*后面加上一段字符窜,用来显示版权信息,后面添加菜单项的时候,也要用到 Actions。

插件概要信息

用文本编辑器打开 copyright-plugin.php文件,输入如下信息:

<?php

/*

Plugin Name: Copyright plugin

Plugin URI:

Description:此插件将在文章正文*下面,显示一行版权信息

Version: 1.0.0

Author: xcxc

Author URI:

License: GPL

*/

?>

保存好文件,然后登录 WordPress后台,打开插件菜单,应该就可以看到这个插件,已经显示在插件列表里面了,并且可以启用这个插件试试,不过没有任何效果,因为到目前为止,这个插件还没有实现任何功能。

为插件实现功能

修改copyright_plugin.php

<?php

/*

Plugin Name: Copyright plugin

Plugin URI:

Description:此插件将在文章正文*下面,显示一行版权信息

Version: 1.0.0

Author: xcxc

Author URI:

License: GPL

*/

/*此插件将在文章正文*下面,显示一行版权信息*/

function display_copyright(){

return"<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>";

}

?>

保存好这个文件,然后打开正在用的主题文件夹,打开index.php文件夹,找到 get_template_part('content', get_post_format());并在下面添加如下代码

if(function_exists('display_copyright')){

echo display_copyright();

}

function_exists是判断 display_copyright函数是否存在,因为当插件停用的时候,主题代码里面是找不到这个函数的,所以要判断一下,防止出错。

然后在 wordpress后台启用该插件,再打开首页看看效果吧!

至此,这段代码,应该可以勉强算是一个插件了。之所以说勉强,是因为这个插件存在一个问题,需要手工去修改主题代码,如果用户换了主题的话,需要在新主题里面再次修改代码,这个不好。

改良插件

还记得我们前面说过的 Hooks(钩子)吗,我们要开始用 Filter钩子了!

代码修改copyright_plugin.php如下:

<?php

/*

Plugin Name: Copyright plugin

Plugin URI:

Description:此插件将在文章正文*下面,显示一行版权信息

Version: 1.0.0

Author: xcxc

Author URI:

License: GPL

*/

add_filter('the_content','display_copyright');

/*这个函数在日志正文结尾处添加一段版权信息,并且只在首页页面才添加*/

function display_copyright($content){

if( is_home())

$content=$content."<p style='color:red'>本站点所有文章均为原创,转载请指明出处!</p>";

return$content;

}

?>

参看以上代码,其中 the_content是钩子的名字,display_copyright是回调函数名称。这样一来,只要启用插件就可以实现功能,无需去修改主题了,请把刚才在index.php文件中添加的代码删掉,然后启用插件,看看效果吧,显示效果应该是一样的,无论怎么换主题,还是会自动显示版权信息。

is_home是判断是不是主页

更进一步

至此一个真正的插件算是完成了。但是此插件将版权信息直接写在代码里,如果用户想自定义版权信息的话,需要修改插件的源代码,仍然不方便,所以此插件仍需改进。其实,我们可以在 WordPress后台中为插件单独添加一个菜单和页面,用户可以在这里来自定义设置设置版权信息,信息可以保存在数据库里面。

先附上完整代码,后面会做说明

<?php

/*

Plugin Name: Copyright plugin

Plugin URI:

Description:此插件将在文章正文*下面,显示一行版权信息

Version: 1.0.0

Author: xcxc

Author URI:

License: GPL

*/

/*注册**插件时要调用的函数*/

register_activation_hook( __FILE__,'display_copyright_install');

/*注册停用插件时要调用的函数*/

register_deactivation_hook( __FILE__,'display_copyright_remove');

function display_copyright_install(){

/*在数据库的 wp_options表中添加一条记录,第二个参数为默认值*/

add_option("display_copyright_text","<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>",'','yes');

}

function display_copyright_remove(){

/*删除 wp_options表中的对应记录*/

delete_option('display_copyright_text');

}

if( is_admin()){

/*利用 admin_menu钩子,添加菜单*/

add_action('admin_menu','display_copyright_menu');

}

function display_copyright_menu(){

/* add_options_page($page_title,$menu_title,$capability,$menu_slug,$function);*/

/*页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面)*/

add_options_page('Set Copyright','Copyright Menu','administrator','display_copyright','display_copyright_html_page');

}

function display_copyright_html_page(){

?>

<div>

<h2>Set Copyright</h2>

<form method="post" action="options.php">

<?php/*下面这行代码用来保存表单中内容到数据库*/?>

<?php wp_nonce_field('update-options');?>

<p>

<textarea

name="display_copyright_text"

id="display_copyright_text"

cols="40"

rows="6"><?php echo get_option('display_copyright_text');?></textarea>

</p>

<p>

<input type="hidden" name="action" value="update"/>

<input type="hidden" name="page_options" value="display_copyright_text"/>

<input type="submit" value="Save" class="button-primary"/>

</p>

</form>

</div>

<?php

}

add_filter('the_content','display_copyright');

/*这个函数在日志正文结尾处添加一段版权信息,并且只在首页页面才添加*/

function display_copyright($content){

if( is_home())

$content=$content. get_option('display_copyright_text');

return$content;

}

?>

说明:

以下代码自己要是在启用插件时和停用插件时调用,注释中已经写得很详细了。

/*注册**插件时要调用的函数*/

register_activation_hook( __FILE__,'display_copyright_install');

/*注册停用插件时要调用的函数*/

register_deactivation_hook( __FILE__,'display_copyright_remove');

function display_copyright_install(){

/*在数据库的 wp_options表中添加一条记录,第二个参数为默认值*/

add_option("display_copyright_text","<p style='color:red'>本站点所有文章均为原创,转载请注明出处!</p>",'','yes');

}

function display_copyright_remove(){

/*删除 wp_options表中的对应记录*/

delete_option('display_copyright_text');

}

添加菜单和页面的代码如下:

if( is_admin()){

/*利用 admin_menu钩子,添加菜单*/

add_action('admin_menu','display_copyright_menu');

}

function display_copyright_menu(){

/* add_options_page($page_title,$menu_title,$capability,$menu_slug,$function);*/

/*页名称,菜单名称,访问级别,菜单别名,点击该菜单时的回调函数(用以显示设置页面)*/

add_options_page('Set Copyright','Copyright Menu','administrator','display_copyright','display_copyright_html_page');

}

至此,已经可以在后台看到菜单项了,但是点击的话,还会出错,因为还没有添加对应的页面(如何自定义添加后台菜单位置)

下面开始添加页面,主要代码如下:

function display_copyright_html_page(){

?>

<div>

<h2>Set Copyright</h2>

<form method="post" action="options.php">

<?php/*下面这行代码用来保存表单中内容到数据库*/?>

<?php wp_nonce_field('update-options');?>

<p>

<textarea

name="display_copyright_text"

id="display_copyright_text"

cols="40"

rows="6"><?php echo get_option('display_copyright_text');?></textarea>

</p>

<p>

<input type="hidden" name="action" value="update"/>

<input type="hidden" name="page_options" value="display_copyright_text"/>

<input type="submit" value="Save" class="button-primary"/>

</p>

</form>

</div>

<?php

}

现在再去点击刚才新加的菜单,可以显示出来一个页面了,我们可以在这里设置版权信息文本。

另外还有如下代码要修改

/*这个函数在日志正文结尾处添加一段版权信息,并且只在首页页面才添加*/

function display_copyright($content){

if( is_home())

$content=$content. get_option('display_copyright_text');

return$content;

}

将原来的静态化文本,改成动态的,之所以要这么改,是因为我们已经将数据存到数据库里面了,这里要从数据库里面取出数据。

1:wordpress开始设置url伪静态方法

后台:设置->固定链接,然后如图设置后保存,此项设置后,发现文章链接都是伪静态了,以为大功告成。但不久后就发现问题。

2:遇到问题显示的结果

1:如果简单的在自定链接后面加上.html单页面文章显示是正常的

2:如果是文章页有很多分页的话,就会出下下面的情况

3:查找问题所在

看到这种链接,执笔人实在是受不了。于是各种百度谷歌,*后无果。

想到模板分页调用的函数 wp_link_pages,于是从此函数下手,很快有了结果。

原来每生成一个链接都会调用一个钩子 wp_link_pages_link来方便定制,*后所有链接生成完后再调用一个钩子 wp_link_pages来个总链接大定制。

*后锁定了一个函数 redirect_canonical,该函数触发同名钩子

4:wordpress成功实现伪静态方法

*终决定一试。在当前主题的functions.php文件中加入代码:

//设置伪静态开始

//解析url的钩子

add_filter('post_rewrite_rules','add_custom_post_rewrite_rules');

function add_custom_post_rewrite_rules($rules){

$custom_rules= array('(d+)_(d+).html$'=>'index.php?p=$matches[1]&page=$matches[2]',);

$rules= array_merge($custom_rules,$rules);

return$rules;

}

//设置url钩子

add_filter('wp_link_pages_link','post_custom_rewrite_url');

function post_custom_rewrite_url($output){

$preg="/(.*)/(d+).html/(d)/";

$output= preg_replace($preg,"$1/$2_$3.html",$output);

return$output;

}

//不许跳转

add_filter('redirect_canonical','post_custom_redirect_url');

function post_custom_redirect_url($output){

return false;

}

//设置伪静态结束

5:*后一步大功告成

上面的设置保存后,再返回后台:设置->固定链接,然后不需要设置什么,就点一下“保存更改”即可,这时你浏览发现文章链接都是伪静态了。

以转载于其它*客,测试4.0版本是可以正常使用。

在制作wordpress主题猴子wordpress插件过程中,经常需要添加样式文件或者js脚本文件,由于大多数用户运行网站上多个插件,可能会加载

各式各样的文件,容易引起冲突,所以wordpress系统为开发者提供了一个很好的脚本及样式文件的排队系统,这有助于防止插件之间的脚本冲突问题。这

篇文章中,主要介绍wordpress中添加Javascript文件与css文件的方法,对那些刚开始学习WordPress主题和插件的开发是特别有

用的。

错误方式

wordpress中提供了wp_head钩子来帮助在页面的头部添加指定的头部消息,比如常见的关键词与描述,很多人也同样会使用这种方式来添加站点的外部样式文件与脚本文件,添加代码如下:

<?php

add_action('wp_head','wpb_bad_script');

function wpb_bad_script(){

echo'<script type="text/javascript" src=""></script>

';//添加js文件

}

?>

这种方式虽然使用简单,但是非常不推荐使用,这种加载方式容易造成wordpress脚本的冲突。

wordpress脚本排队系统

1、介绍

wordpress在全球拥有强大的开发社群,很多人都非常积*的参与到wordpress的主题与插件的开发当中,并且可以免费使用,为了防止各个开

发者开发的插件在使用过程总出现脚本冲突的问题,wordpress提供了一个非常强大的脚本加载函数wp_enqueue_script,通过这个函

数,可以告诉wordpress在哪加载脚本,脚本依赖哪些框架,而且该函数在利用内置的Javascript库时,可以避免多次加载同一个脚本。这有助

于减少页面加载时间,以及避免与其他主题和插件冲突。

2、使用实例

wordpress正确加载脚本的使用很简单,代码如下:

<?php

function wpb_adding_scripts(){

wp_register_script('my_amazing_script', plugins_url('amazing_script.js', __FILE__), array('jquery'),'1.1', true);

wp_enqueue_script('my_amazing_script');

}

add_action('wp_enqueue_scripts','wpb_adding_scripts');

?>

可以将以上代码放入你的插件文件中或者你主题的functions.php文件。

说明:

实例中首先通过函数wp_register_script(),这个函数接收5个参数:

$handle

(string)(必须)脚本名称.名称必须**在之后函数 wp_enqueue_script()会使用到该名称.

Default: None

$src

(string)(必须)脚本路径,可以使用**路径。

Default: None

$deps

(array)(可选)脚本依赖包,依赖包会在脚本加载之前预先加载。

Default: array()

$ver

(string)(可选)脚本版本控制。

Default: false

$in_footer

(boolean)(可选)定义脚本的位置,如果为true脚本会在页面底部加载,默认在head头部加载。

Default: false

当使用wp_register_script()函数注册脚本文件后,就可以使用函数wp_enqueue_script()函数来加载该注册的脚本文件。

也许有人会问为什么不直接加载脚本文件,而是先注册后加载,这不是多此一举吗。其实这主要是为了站点其他开发者在其他插件或者主题总方便引用核心脚本文件。

wordpress如何加载CSS样式文件

wordpress css样式文件的加载与以上介绍的脚本文件加载方式是一样的,如下实例:

<?php

function wpb_adding_styles(){

wp_register_script('my_stylesheet', plugins_url('my-stylesheet.css', __FILE__));

wp_enqueue_script('my_stylesheet');

}

add_action('wp_enqueue_scripts','wpb_adding_styles');

?>

以上实例用了wp_register_script钩子来加载样式文件。

实例中使用了plugins_url()来获取样式文件的路径,这个一般在插件开发过程中使用的居多,如果主题中开发使用到

wp_register_script()函数则可以使用get_template_directory_uri()来获取样式文件路径,如果是子主题中

使用,则可以使用函数get_stylesheet_directory_uri()来获取路径,实例如下:

<?php

function wpb_adding_scripts(){

wp_register_script('my_amazing_script', plugins_url('amazing_script.js', __FILE__), array('jquery'),'1.1', true);

wp_enqueue_script('my_amazing_script');

}

add_action('wp_enqueue_scripts','wpb_adding_scripts');

?>

相关文章
在线客服
微信联系
客服
扫码加微信(手机同号)
电话咨询
返回顶部