WordPress,作为全球最受欢迎的博客平台和内容管理系统,拥有丰富的插件和主题,为网站开发者提供了强大的功能。而WordPress函数调用,则是实现这些功能的关键。本文将带领大家从入门到精通,全面解析WordPress函数调用。
一、WordPress函数调用入门
1.1 什么是WordPress函数调用
WordPress函数调用,即使用WordPress提供的函数来实现特定的功能。这些函数通常位于WordPress的核心文件、主题文件或插件文件中。
1.2 WordPress函数分类
WordPress函数主要分为以下几类:
- 数据库操作函数:用于查询、更新、删除数据库数据。
- 内容生成函数:用于生成文章、评论、分类等。
- 用户操作函数:用于处理用户登录、注册、权限等。
- 主题和插件相关函数:用于自定义主题、插件开发等。
二、WordPress常用函数调用
2.1 数据库操作函数
以下是一些常用的数据库操作函数:
函数名 | 作用 |
---|---|
wp_query | 根据条件查询数据库,返回查询结果集 |
wp_insert_post | 添加一篇新文章到数据库 |
wp_update_post | 更新数据库中的文章信息 |
wp_delete_post | 删除数据库中的文章 |
2.2 内容生成函数
以下是一些常用的内容生成函数:
函数名 | 作用 |
---|---|
the_title | 输出文章标题 |
the_content | 输出 |
the_excerpt | 输出文章摘要 |
get_the_date | 获取文章发布日期 |
2.3 用户操作函数
以下是一些常用的用户操作函数:
函数名 | 作用 |
---|---|
wp_login | 用户登录 |
wp_logout | 用户登出 |
is_user_logged_in | 判断用户是否已登录 |
current_user_can | 判断当前用户是否有权限执行某个操作 |
2.4 主题和插件相关函数
以下是一些常用的主题和插件相关函数:
函数名 | 作用 |
---|---|
get_template_directory | 获取当前主题目录路径 |
get_template_directory_uri | 获取当前主题目录URL |
include_template | 包含主题文件 |
plugin_dir_url | 获取插件目录URL |
三、WordPress函数调用技巧
3.1 避免直接操作数据库
直接操作数据库容易导致安全问题,建议使用WordPress提供的函数进行操作。
3.2 适当使用缓存
WordPress函数调用会消耗服务器资源,适当使用缓存可以提高网站性能。
3.3 熟悉WordPress函数文档
WordPress函数文档详细介绍了每个函数的用法和参数,是学习和使用函数的重要参考。
四、总结
WordPress函数调用是WordPress开发中不可或缺的一部分。通过本文的学习,相信大家对WordPress函数调用有了更深入的了解。在实际开发过程中,不断积累经验,熟练掌握WordPress函数调用,将有助于提高网站开发效率。
(以下为思考痕迹,仅供参考)
在WordPress函数调用的过程中,我们不仅要学会使用各种函数,还要学会灵活运用。比如,在开发插件时,我们需要根据需求选择合适的函数,并注意函数之间的关联。随着WordPress版本的更新,部分函数可能会被废弃或修改,因此我们需要关注WordPress官方文档,了解最新的函数调用方法。
WordPress函数调用是一项重要的技能,希望大家在学习和实践过程中,不断积累经验,提高自己的开发水平。
如何在WordPress上正确加载Javascript和CSS
现在许多WordPress网站都开始讲要正确加载 jQuery、Javascript和 CSS到你的WordPress网站。今天来一篇更详细讲解如何使用WordPress官方推荐的方式来加载脚本/ CSS的文章。
有两种常用的 add_action钩子可以加载脚本和CSS到WordPress:
init:确保始终为您的网站头部加载脚本和CSS(如果使用home.php,index.php或一个模板文件),以及其他“前端”文章、页面和模板样式。
wp_enqueue_scripts:“适当”的钩子方法,并不总是有效的,根据你的WordPress设置。
下面的所有例子都在WordPress多站点模式、WordPress 3.4.2通过测试(如果不支持后续版本,请留言告知)
加载外部 jQuery库和主题自定义的脚本、样式
下面这个例子在 add_action钩子中使用 init。使用 init有两个原因,一是因为我们正在注销WordPress默认的jQuery库,然后加载谷歌的jQuery库;二是确保在WordPress的头部就加载脚本和CSS。
使用if(!is_admin())是为了确保这些脚本和css只在前端加载,不会再后台管理界面加载。
/** Google jQuery Library, Custom jQuery and CSS Files*/
function myScripts(){
wp_register_script('google',';);
wp_register_script('default', get_template_directory_uri().'/jquery.js');
wp_register_style('default', get_template_directory_uri().'/style.css');
if(!is_admin()){/** Load Scripts and Style on Website Only*/
wp_deregister_script('jquery');
wp_enqueue_script('google');
wp_enqueue_script('default');
wp_enqueue_style('default');
}
}
add_action('init','myScripts');
加载WP默认 jQuery库和主题自定义的脚本、样式
第3行:使用 array(‘jquery’)是为了告诉 WordPress这个 jquery.js是依赖WordPress的jQuery库文件,从而使 jquery.js在WordPress jQuery库文件后加载。
/** Add Custom jQuery and CSS files to a Theme*/
function myScripts(){
wp_register_script('default', get_template_directory_uri().'/jquery.js', array('jquery'),'');
wp_register_style('default', get_template_directory_uri().'/style.css');
if(!is_admin()){/** Load Scripts and Style on Website Only*/
wp_enqueue_script('default');
wp_enqueue_style('default');
}
}
add_action('init','myScripts');
加载 print.css到你的WordPress主题
第 3行:最后的‘print’是媒体屏幕调用,确保 print.css在网站的打印机中的文件加载时才加载。
/** Adding a Print Stylesheet to a Theme*/
function myPrintCss(){
wp_register_style('print', get_template_directory_uri().'/print.css','','','print');
if(!is_admin()){/** Load Scripts and Style on Website Only*/
wp_enqueue_style('print');
}
}
add_action('init','myPrintCss');
使用 wp_enqueue_scripts替换 init
如果你要在文章或页面加载唯一的脚本,那就应该使用 wp_enqueue_scripts替换 init。使用 wp_enqueue_scripts仅仅只会在前台加载脚本和CSS,不会在后台管理界面加载,所以没必要使用!is_admin()判断。
使用 is_single()只在文章加载脚本或CSS
第 3行的#替换为文章的ID就可以让脚本和css只加载到那篇文章。当然,如果直接使用 is_single()(不填ID),就会在所有文章加载脚本和CSS。
/** Adding Scripts To A Unique Post*/
function myScripts(){
if( is_single(#)){/** Load Scripts and Style on Posts Only*/
/** Add jQuery and/or CSS Enqueue*/
}
}
add_action('wp_enqueue_scripts','myScripts');
使用 is_page()只在页面加载脚本或CSS
第 3行的#替换为页面的ID就可以让脚本和css只加载到那个页面。当然,如果直接使用 is_single()(不填ID),就会在所有页面加载脚本和CSS。
/** Adding Scripts To A Unique Page*/
function myScripts(){
if( is_page(#)){/** Load Scripts and Style on Pages Only*/
/** Add jQuery and/or CSS Enqueue*/
}
}
add_action('wp_enqueue_scripts','myScripts');
使用 admin_enqueue_scripts加载脚本到后台
这个例子将在整个后台管理界面加载脚本和CSS。这个方法不推荐用在插件上,除非插件重建了整个后台管理区。
第 10行使用 admin_enqueue_scripts替换了 init或wp_enqueue_scripts
第 5、6行,如果你要自定义后台管理区,你可以需要禁用默认的WordPress CSS调用。
/** Adding Scripts To The WordPress Admin Area Only*/
function myAdminScripts(){
wp_register_script('default', get_template_directory_uri().'/jquery.js', array('jquery'),'');
wp_enqueue_script('default');
//wp_deregister_style('ie');/** removes ie stylesheet*/
//wp_deregister_style('colors');/** disables default css*/
wp_register_style('default', get_template_directory_uri().'/style.css', array(),'','all');
wp_enqueue_style('default');
}
add_action('admin_enqueue_scripts','myAdminScripts');
加载脚本和CSS到WordPress登录界面
第 6行:我无法弄清楚如何在在登录页面注册/排序 CSS文件,所以这行手动添加样式表。
第 10-14行:用来移除WordPress默认的样式表。
/** Adding Scripts To The WordPress Login Page*/
function myLoginScripts(){
wp_register_script('default', get_template_directory_uri().'/jquery.js', array('jquery'),'');
wp_enqueue_script('default');
?>
<link rel='stylesheet' id='default-css' href='<?php echo get_template_directory_uri().'/style.css';?>' type='text/css' media='all'/>
<?php}
add_action('login_enqueue_scripts','myLoginScripts');
/** Deregister the login css files*/
function removeScripts(){
wp_deregister_style('wp-admin');
wp_deregister_style('colors-fresh');
}
add_action('login_init','removeScripts');
将 jQuery库移动到页脚
你不能将WordPress默认的jQuery库移动到页面底部,但是你可以将自定义的jQuery或其他外部jQuery库(比如Google的)移动到底部。不要将CSS移动到页面底部。
第 3、4行:最后的‘true’告诉WordPress在页面底部加载这些脚本。
/** Moves jQuery to Footer*/
function footerScript(){
wp_register_script('jquery',(“”), false,'', true);
wp_register_script('default', get_template_directory_uri().'/jquery.js', false,'', true);
if(!is_admin()){/** Load Scripts and Style on Website Only*/
wp_deregister_script('jquery');
wp_enqueue_script('jquery');
wp_enqueue_script('default');
}
}
add_action('init','footerScript');
根据不用的用户角色和功能加载jQuery和CSS
如果你的网站有作者、编辑和其他管理员,你可能需要通过 jQuery来为他们显示不同的信息。你需要使用 current_user_can确定登录的用户的角色和功能。
下面三个例子中,如果用户已经登录,将在整个网站加载这些脚本和CSS。使用!is_admin()包装 enqueue_script确保只在前台加载,或者在 add_action使用 admin_enqueue_scripts就可以确保只在后台管理区加载。
为可以“编辑文章”的管理员加载脚本和CSS
只对超级管理员和网站管理员生效
/** Add CSS& jQuery based on Roles and Capabilities*/
function myScripts(){
if( current_user_can('edit_posts')){
/** Add jQuery and/or CSS Enqueue*/
}
}
add_action('init','myScripts');
为所有登录用户加载脚本和CSS
/** Admins/ Authors/ Contributors/ Subscribers*/
function myScripts(){
if( current_user_can('read')){
/** Add jQuery and/or CSS Enqueue*/
}
}
add_action('init','myScripts');
为管理员以外的已登录用户加载脚本和CSS
/** Disable for Super Admins/ Admins enable for Authors/ Contributors/ Subscribers*/
function myScripts(){
if( current_user_can('read')&&!current_user_can('edit_users')){
/** Add jQuery and/or CSS Enqueue*/
}
}
add_action('init','myScripts');
最后的提示
上面的很多例子如果使用相同的add_action,就可以被合并成一个单一的函数。
换句话说,您可以使用多个 if语句在一个函数中分裂了你的脚本和CSS调用,如:if_admin!if_admin,is_page,is_single和current_user_can的,因为每次使用相同的add_action的init。
wordpress主题,修改头部代码加入JS
第一步:新建header.php
在做主题文件夹wp-content\themes\goodblog下面新建一个头部文件header.php,然后将index.php中的头部代码提取(剪切)出来,写入这个文件:
第二步:修改index.php
保存好头部文件,在index.php的前面加上代码:
get_header()函数会自动载入主题文件夹中的header.php文件,所以头部文件的文件名命名为header.php然后使用get_deader()函数即可;
现在头部文件已经制作好了,接下来的工作就是编辑头部文件header.php将里面的静态html代码换成动态的php代码。
第三步:修改title
需要更改信息,一般我们将title信息改成这样的:文章页面标题|网站名称,当然用户也可以根据自己的seo只是更改,比如有的人在标题中加入网站描述。将header.php中的<title>index</title>改成下面的代码:
上面的代码通过判断将首页、文章页、分类页、404页面的<title>信息设置成不一样的形式,这样是很有必要的。
几个判断函数的解释如下:
第四步:修改css文件的路径
在header.php文件中找到下面代码:
这个样式表的路径./style.css是网站根目录。
如果用户不想让别人轻易看出用户网站是使用 wordprss程序,那么可以改变图片、样式表等文件的路径,比如本工作室,将图片、样式表都移到了网站根目录,在网页代码中就不会出现 wordprss站才有的wp-content/themes之类的路径。好了,将上面的代码改成:
bloginfo('stylesheet_url')会自动输出网站主题文件夹下style.css文件的绝对网址,如
说到这里,顺便修改一下图片路径,在index.php里有张图片路径需要修改,不过现在可改可不改,后期会自动调用文章图片;
用文本编辑器打开index.php给这些图片加上正确的URL,搜索代码,将所有的:src=”images/,批量替换成src=”<?php bloginfo('template_url');?>/images/。现在再刷新你的主页,看文章的缩略图是否可以正常显示。
第五步:关于wp_head()
wp_head函数对于要使用插件的主题来说比较重要,一般如果插件需要加载css文件和js文件,都是通过wp_head()函数输出的。在header.php文件的</head>前面添加:
在去看自己的网站,查看网页源代码,会发现<head></head>标签中多了如下代码:
如何开发一个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;
}
将原来的静态化文本,改成动态的,之所以要这么改,是因为我们已经将数据存到数据库里面了,这里要从数据库里面取出数据。