适用人群
- 刚接触WordPress,想在本地或服务器上搭建自己的网站,但不想只用现成主题,而是想通过写几行代码来实现个性化功能的新手。
- 会一点PHP基础(哪怕只认识
if和echo),但没系统学过WordPress函数机制,想快速上手开发的同学。 - 想避免“改主题PHP文件导致网站白屏”这种惨痛教训,渴望掌握正确函数挂载方式的站长。
如果你符合以上任意一条,请跟着下面的步骤,打开电脑,我们直接动手,本教程不需要你懂面向对象,不需要你背一堆函数名,只需要你复制粘贴,然后理解每一行在干什么。
第一步:安装WordPress(本地或云服务器均可)
- 下载WordPress最新版压缩包,解压到你的网站根目录(例如本地用
localhost/wordpress,服务器用/var/www/html)。 - 创建一个数据库(MySQL),记住数据库名、用户名、密码。
- 浏览器打开你的网站地址,按提示填写数据库信息、站点标题、管理员账号,点击“安装”。
- 进入后台后,安装一个基础主题(比如默认的Twenty Twenty-Four),并激活它。
注意:本教程所有代码都放在一个自定义插件里,而不是直接改主题的
functions.php,原因稍后讲。
WordPress函数使用,从零搭建一个带自定义功能的网站(新手实操指南)
第二步:创建第一个“功能插件”
在/wp-content/plugins/目录下新建一个文件夹,命名为my-first-functions,在里面创建一个文件my-first-functions.php,用记事本或VS Code打开,输入以下内容:
<?php /** * Plugin Name: 我的第一个函数插件 * Description: 用于学习WordPress函数挂载机制 * Version: 1.0 */
保存后,回到WordPress后台,进入“插件”页面,你会看到“我的第一个函数插件”已经出现,点击“启用”。
你的插件虽然是空的,但WordPress已经认识它了,我们要往里面写函数。
第三步:理解并使用最核心的函数——add_action和add_filter
WordPress的函数世界,本质上是由“钩子(Hook)”组成的,你写的函数就像一块积木,通过add_action或add_filter挂到WordPress这个乐高板上。
例子1:在网页底部显示一段自定义文字。
在插件文件里,接着写:
function my_custom_footer_text() {
echo '<p style="text-align:center;">本站由WordPress函数驱动,快乐建站!</p>';
}
add_action( 'wp_footer', 'my_custom_footer_text' );
解释:
my_custom_footer_text是你自己定义的函数名,前面加my_前缀避免和主题或其他插件冲突。wp_footer是WordPress在网页底部输出的一个钩子。add_action( 'wp_footer', 'my_custom_footer_text' )意思是:当WordPress执行到wp_footer时,立刻调用你的函数。
保存后,刷新网站底部,是不是多了那句话?恭喜,你第一次通过WordPress函数改变网站输出。
例子2:修改文章摘要的长度。
这次我们用过滤器(Filter),它用来修改数据。
function my_custom_excerpt_length( $length ) {
return 30; // 把默认摘要长度改成30个词
}
add_filter( 'excerpt_length', 'my_custom_excerpt_length' );
excerpt_length是一个过滤器钩子,它会传递一个数字(原始长度)给函数,你的函数接收$length并返回新值,WordPress会用新值替换旧值。
第四步:完整搭建一个“自定义功能区块”——推荐新闻列表
上面只是热身,现在我们来做一个真正实用的功能:在文章内容后面,自动显示同分类下的最新文章标题,我们用到几个重要函数:get_the_category()、get_posts()、get_permalink()、get_the_title()。
在插件文件末尾加上:
function my_related_posts_by_category( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$categories = get_the_category();
if ( ! empty( $categories ) ) {
$cat_id = $categories[0]->term_id;
$related_posts = get_posts( array(
'category' => $cat_id,
'posts_per_page' => 5,
'post__not_in' => array( get_the_ID() ),
) );
if ( $related_posts ) {
$html = '<ul style="border-top:1px solid #eee;margin-top:30px;padding-top:15px;">';
foreach ( $related_posts as $post ) {
setup_postdata( $post );
$html .= '<li><a href="' . get_permalink( $post ) . '">' . get_the_title( $post ) . '</a></li>';
}
$html .= '</ul>';
wp_reset_postdata();
$content .= $html;
}
}
}
return $content;
}
add_filter( 'the_content', 'my_related_posts_by_category' );
这段代码做了什么?
the_content过滤器会在文章正文输出时调用你的函数。- 首先用
is_single()确认是单篇文章页面,in_the_loop()确保在循环里,is_main_query()确保是主查询,避免在侧边栏或菜单里触发。 get_the_category()获取当前文章的分类。get_posts()是一个强大的函数,按照参数查询5篇同分类且不是当前文章的文章。setup_postdata($post)和wp_reset_postdata()是配套的,它们让你能用get_the_title($post)等同能模板标签,其实直接用$post->post_title也可以,但用函数更“WordPress”。
保存插件,打开一篇有分类的文章,拉到文末,你应该看到“相关阅读”列表了。
第五步:配置要点(务必看完)
- 函数前缀必须唯一:如上所述,用
my_或你网站缩写,比如ab_,防止与其他插件碰撞。 - 善用
is_admin()判断:如果你的函数只在后台生效,可以加if ( is_admin() )包裹,避免在前台加载无用代码。 - 数据库操作需用
$wpdb类:不要直接用mysql_query,那是旧时代的做法,而且会被WordPress拒绝执行,正确方式是用全局变量global $wpdb;然后调用->query()。 - 数据要转义输出:用
esc_html()、esc_url()等函数包装所有输出内容,防止XSS攻击,比如上面例子中,标题应该写成esc_html( get_the_title( $post ) )更安全,我为了简洁没写,但你自己使用时务必加上。
第六步:常见踩坑提醒(血泪教训)
- 坑1:直接改主题的
functions.php,一升级主题,你的代码全没了,而且只要写错一行,整个网站白屏,正确做法是创建插件,或者使用子主题(子主题的functions.php是安全的),本教程直接做了插件,就是最保险的方案。 - 坑2:钩子顺序搞错。
add_action必须放在你要挂载的那个动作发生之前,比如你想在wp_head输出东西,但你的插件在主题头部之后才加载?不会,插件永远在主题之前加载,所以放心,但如果你在functions.php里写add_action('init', 'my_func')之后又在同一个函数里调用wp_redirect,就可能因为init时机太早而失败。init早于admin_init,wp_loaded更靠后。 - 坑3:忘记检查函数是否存在。 当你使用一个可能被主题或其他插件定义过的函数名时,最好用
function_exists()包裹判断。
if ( ! function_exists( 'my_custom_function' ) ) {
function my_custom_function() {
// ...
}
}
否则如果别的地方已经定义同名函数,PHP直接报致命错误。
- 坑4:
get_posts和WP_Query混淆。 在自定义页面上,如果先用了WP_Query,可能会干扰主循环,所以本教程用get_posts,它不改变主查询,安全。 - 坑5:缓存问题。 如果你写了操作数据库的函数,别忘了更新缓存对象,比如更新选项用
update_option,无需额外处理,但如果你自己用wp_cache_set,需要清楚缓存键名。
你已经入门了
步骤,你跟着操作下来,应该能看到网站底部有一行字,文章底部有相关推荐,还学会了怎么用add_action和add_filter,这只是WordPress函数海洋里的两滴水,下一步,你可以试着用wp_enqueue_script添加JS文件,用register_nav_menus注册菜单,用add_shortcode创建短代码,每次引入新函数,都记住三步:定义函数、挂到钩子上、测试。
只要记住“前缀防冲突、插件防覆盖、过滤防攻击、钩子防时机错误”,你就能在WordPress的世界里越走越远,手搭的网站,每一行代码都是你说了算——这种感觉,是不是比点鼠标的页面构建器爽多了?去试试吧。

发表评论