WordPress 作为全球最受欢迎的博客平台和内容管理系统,其强大的功能离不开函数的调用。函数是 WordPress 代码的核心,掌握函数的调用对于提升 WordPress 网站的性能和功能至关重要。本文将深入解析 WordPress 调用函数的方法,并提供一些实用的实践技巧。
一、WordPress 函数概述
WordPress 函数是 PHP 语言编写的一系列代码块,用于实现特定的功能。在 WordPress 中,函数可以分为以下几类:
1. 核心函数:由 WordPress 核心提供的函数,用于实现网站的基础功能,如获取文章、设置导航菜单等。
2. 插件函数:由插件开发者编写的函数,用于扩展 WordPress 的功能。
3. 主题函数:由主题开发者编写的函数,用于实现主题特有的功能。
二、WordPress 调用函数的方法
WordPress 提供了多种调用函数的方法,以下是一些常用的方法:
1. 直接调用
直接调用是最简单的调用方法,只需在代码中直接使用函数名即可。例如:
“`php
// 获取文章标题
echo get_the_title();
>
“`
2. 使用函数别名
WordPress 为了方便开发者使用,为一些常用函数提供了别名。例如,`the_title()` 是 `get_the_title()` 的别名。
“`php
// 使用函数别名获取文章标题
echo the_title();
>
“`
3. 使用作用域限定符
当函数名与变量名冲突时,可以使用作用域限定符来区分。例如:
“`php
// 获取文章标题
echo get_the_title();
// 获取变量 $title 的值
echo $title;
>
“`
4. 使用函数回调
函数回调是一种将函数作为参数传递给另一个函数的方法。例如:
“`php
// 定义一个函数
function my_custom_function() {
echo ‘Hello, World!’;
}
// 将函数作为参数传递给 do_action() 函数
do_action(‘my_custom_action’, ‘my_custom_function’);
>
“`
三、WordPress 函数调用技巧
1. 了解函数的作用:在调用函数之前,先了解其功能和参数,避免误用。
2. 使用函数文档:WordPress 官方文档提供了详细的函数说明,可以查阅文档了解函数的用法。
3. 注意函数返回值:有些函数会返回值,需要注意获取和存储返回值。
4. 避免滥用函数:函数调用会增加代码的复杂度,应尽量减少不必要的函数调用。
四、实例分析
以下是一个使用 WordPress 函数获取文章分类的实例:
“`php
// 获取文章分类
$categories = get_the_category();
// 遍历分类并输出分类名称
foreach ($categories as $category) {
echo $category->name . ‘
‘;
}
>
“`
在这个实例中,我们使用了 `get_the_category()` 函数获取文章的分类,然后遍历分类并输出分类名称。
五、总结
WordPress 函数是构建强大网站的关键,掌握函数的调用方法对于提升网站性能和功能至关重要。本文从 WordPress 函数概述、调用方法、调用技巧等方面进行了详细解析,并提供了实例分析。希望本文能帮助您更好地掌握 WordPress 函数调用技巧,为您的网站开发带来便利。
如何开发一个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;
}
将原来的静态化文本,改成动态的,之所以要这么改,是因为我们已经将数据存到数据库里面了,这里要从数据库里面取出数据。
wordpress 怎样减少数据库读取量
#1,若您的WordPress版本为2.3及以前,可采用如下方法令系统自动缓存内部调用函数,而完全不用担心缓存对系统交互性的影响(如延迟等)。
Step1:在WordPress安装目录下的wp-content文件夹下创建名为cache的目录,属性设置为755,如下图:
Step2:打开WordPress安装根目录下的wp-config.php文件,在其尾端加入define('ENABLE_CACHE', true);,如下图:
保存后上传更新文件,刷新页面后,可发现新创建的cache文件夹中生成了如下文件:
缓存的是一些不需要经常修改的文件,如分类名称、存档日期等。该缓存方法名为object缓存,并不缓存网页,而传统的wp-cache调用是缓存网页的,会影响网页的交互实时性,使用户体验些许变差。
#2,若您的WordPress版本为2.5及以上版本,由于新版WP取消了object缓存功能可以使用将所有待查数据都存入数据库options表(一般的默认名称为wp_options)的方法,大幅度减少数据库查询次数。ThinkAgain的解释如下:
默认WP有10个数据表,wp_posts和comments主要存储文章内容和评论,
其它的几个包括term等存储了目录和标签等等。这里不细谈。wp_options用来存储Wordpress以及插件运行时所涉及的配置等。且WP会在
运行时自动读取该表的内容。换句话说,因为WP已经预读这部分内容,所以直接调用wp_options内的数据是不会产生数据库查询的。()
方法:假如要缓存的是分类名称调用表单,则写functions.php如下代码:
function cache_category(){
$cached= get_option('multicolor_cache_category');
if($cached){
echo$cached;
}else{
$cached= cache_collapsible_list_cats();
echo”Update cache”;
echo$cached;
}
}
add_action('publish_post','cache_collapsible_list_cats');
当然,这显得很复杂,不过ThinkAgain说,WP2.6也是可以使用object自动缓存功能的,请等待他更新的方法。
#3,由于WordPress的内部永久链接调用函数为了追求老版插件的最大兼容性所以较啰嗦,比较耗费查询次数,可在functions.php写入如下代码,大幅度减少查询次数(均适用)
function revised_permalink($post,$leavename=false){
$rewritecode= array(
'%year%',
'%monthnum%',
'%day%',
'%hour%',
'%minute%',
'%second%',
$leavename?'':'%postname%',
'%post_id%',
'%category%',
'%author%',
$leavename?'':'%pagename%',
);
if( empty($post->ID)) return FALSE;
if($post->post_type=='page')
return get_page_link($post->ID,$leavename);
elseif($post->post_type=='attachment')
return get_attachment_link($post->ID);
$permalink= get_option('permalink_structure');
if(''!=$permalink&&!in_array($post->post_status, array('draft','pending'))){
$unixtime= strtotime($post->post_date);
$category='';
if( strpos($permalink,'%category%')!== false){
$cats= get_the_category($post->ID);
if($cats)
usort($cats,'_usort_terms_by_ID');// order by ID
$category=$cats[0]->slug;
if($parent=$cats[0]->parent)
$category= get_category_parents($parent, FALSE,'/', TRUE).$category;
// show default category in permalinks, without
// having to assign it explicitly
if( empty($category)){
$default_category= get_category( get_option('default_category'));
$category= is_wp_error($default_category)?'':$default_category->slug;
}
}
$author='';
if( strpos($permalink,'%author%')!== false){
$authordata= get_userdata($post->post_author);
$author=$authordata->user_nicename;
}
$date= explode(“”,date('Y m d H i s',$unixtime));
$rewritereplace=
array(
$date[0],
$date[1],
$date[2],
$date[3],
$date[4],
$date[5],
$post->post_name,
$post->ID,
$category,
$author,
$post->post_name,
);
$permalink= get_option('home'). str_replace($rewritecode,$rewritereplace,$permalink);
$permalink= user_trailingslashit($permalink,'single');
return apply_filters('post_link',$permalink,$post);
} else{// if they're not using the fancy permalink option
$permalink= get_option('home').'/?p='.$post->ID;
return apply_filters('post_link',$permalink,$post);
}
}
点击下面的链接下载修改好的文件,请解压后上传或粘贴到您原来的文件中。此方法文章页查询次数至少可降低10。
注意:如果您原来的插件有诸如下面的代码,并且您的永久链接方式为postname而不是postid,请修改
$sql=”SELECT ID, post_title, comment_count,post_date, post_content FROM$tableposts WHERE post_status='publish'”;
为
$sql=”SELECT ID, post_name, post_title,
comment_count,post_date, post_content FROM$tableposts WHERE
post_status='publish'”;
至此您的数据库查询次数将减小为个位数,繁忙时访问速度提高较显著,速度应当与直接生成静态文件时的情况差距不大,但互动性丝毫不减。
如何修改与制作wordpress的作者页面
一般情况下,多数主题下都有author.php这个文件,这既是作者展示页面。如果发现自己正在使用的主题中没有author.php这个文件的话,Wordpress会默认寻找 archives.php文件,如果连archives.php都不可用,Wordpress会接着寻找你的 index.php文件。
想要创建一个author.php文件的话,可以拷贝archives.php或者 single.php的内容。在这两个页面的基础上插入对应的wordpress作者页面调用函数,即可调用相应的作者信息。
常用的作者信息调用函数:
the_author显示文章的作者
the_author_description显示文章作者的描述(作者个人资料中的描述)
the_author_login显示文章作者的登录名
the_author_firstname显示文章作者的firstname(名)
the_author_lastname显示文章作者的lastname(姓)
the_author_nickname显示文章作者的昵称
the_author_ID显示文章作者的ID号
the_author_email显示文章作者的电子邮箱
the_author_url显示文章作者的网站地址
the_author_link显示一个以文章作者名为链接名,链接地址为文章作者的网址的链接。
the_author_icq显示文章作者的icq
the_author_aim显示文章作者的aim
the_author_yim显示文章作者的yim
the_author_msn(不推荐使用)显示文章作者的msn
the_author_posts显示文章作者已发表文章的篇数
the_author_posts_link显示一个链接到文章作者已发表文章列表的链接
list_authors(不推荐使用)显示blog所有作者和他们的相关信息。完整函数如下:
参数:
optioncount:是否显示各作者已发表文章的篇数,可选值为:TRUE和 FALSE(默认值)
exclude_admin:是否不列出管理员,可选值为:TRUE(默认值)和 FALSE
show_fullname:是否显示各作者的全名,可选值为:TRUE和 FALSE(默认值)
hide_empty:是否不显示发表文章数为0的作者,可选值为:TRUE(默认值)和 FALSE
feed:链接到各个作者发表文章的RSS供稿种子链接名,默认为空,不显示RSS供稿种子
feed_image:供稿种子的图片地址,如果提供此项,则覆盖上面的feed,默认为空
代表不显示各个作者的发布文章数,列出管理员,显示各作者的全名,显示发布文章数为0的作者和不显示RSS供稿种子。
wp_list_authors显示blog作者列表,如果作者发表过文章,则他的名字将链接到他发表的文章列表中。可定义是否显示其他信息。
参数:
optioncount:是否显示各个作者发表文章数,可选值:true和 false(默认值)
exclude_admin:是否不显示“admin”用户,可选值:true(默认值)和 false
show_fullname:是否显示各个作者的全名,如果不显示,将显示昵称。可选值:true和 false(默认值)
hide_empty:是否不显示发表文章数为0的作者,可选值:true(默认值)和 false
feed:链接到各个作者发表文章的RSS供稿种子链接名,默认为空,不显示RSS供稿种子
feed_image:供稿种子的图片地址,如果提供此项,则覆盖上面的feed,默认为空
增加用户信息字段:
为了更加简便与安全的增加信息字段,建议将自定义字段添加到“联系信息”中。“联系信息”的字段添加方式非常简单,打开wp-includes/user.php文件,约在1539行可以找到:$user_contactmethods= array代码,在大括号中修改或增加字段。
字段增加的格式为‘数据库字段名’=> __(‘标题说明文字’)修改后的完整代码演示:
function _wp_get_user_contactmethods($user= null){
$user_contactmethods= array();
if( get_site_option(‘initial_db_version’)< 23588){
$user_contactmethods= array(
‘aim’=> __(‘支付宝收款地址’),
‘addres’=> __(‘所在地’),
‘job’=> __(‘职业’),
‘qq’=> __(‘QQ’),
‘touxiang’=> __(‘头像url’)
);
}
return apply_filters(‘user_contactmethods’,$user_contactmethods,$user);
}
可以根据需要删除默认的字段,添加自己需要的字段,以达到增加用户选项的目的。
修改此项后,在用户后台的个人资料中也会自动出现对应的输入框,无需再修改其他程序文件。如果需要在作者页面的前端调用显示自定义字段则只需要使用“echo$curauth->xxx;”的PHP语句即可输出对应字段。
附上本文的作者页面范例:
安装author info插件。制作一个小插件,安装后可以直接实现上述代码所说的功能。






