如何不使用插件在WordPress文章中添加PHP代码
WordPress 无插件手动在文章(Post)中运行PHP代码实现方法
WordPress 默认不会执行编辑器内写入的PHP代码,你之前能在Page中运行PHP,本质是通过自定义页面模板、内容过滤钩子等方式实现的,Post 类型默认没有匹配对应的生效规则,按下面三个无插件方案任选即可,都不需要第三方工具。
方案1:自定义文章单页模板(最推荐,适配你现有Page的PHP逻辑,安全性最高)
这个方案和你给Page加PHP的逻辑完全一致,只是把模板的支持范围扩展到Post类型:
- 进入你当前激活主题的根目录,路径为
/wp-content/themes/[你的当前主题名称]/ - 复制你之前能正常运行PHP的Page模板文件,修改文件头部的模板声明注释,新增
Template Post Type: post配置,让WordPress识别这是可用于文章的模板,示例模板结构:
<?php /* Template Name: 自定义文章业务模板 Template Post Type: post */ // 加载主题头部 get_header(); // 直接把你那2000行PHP业务代码粘贴到这个位置即可 // 如果需要保留文章原有内容、评论等默认结构,把原主题single.php里的对应循环逻辑粘贴到合适位置即可 if (have_posts()) { while (have_posts()) { the_post(); the_title('<h1 class="entry-title">', '</h1>'); the_content(); // 需要加载评论区就加 comments_template() } } // 加载主题底部 get_footer(); ?>
- 把文件保存为比如
custom-post-template.php放回主题根目录,之后编辑任意文章时,右侧侧边栏的「模板」下拉菜单就能选中这个自定义模板,选中后更新文章,PHP代码就会和之前在Page上一样正常运行。 - 如果不想每篇文章手动选模板,可以给这个模板加自动加载规则,在
functions.php里加如下代码即可:
add_filter('template_include', 'auto_load_custom_post_template'); function auto_load_custom_post_template($template){ // 括号里填需要跑自定义PHP的文章ID,多个ID用逗号分隔 if(is_single([123, 456])){ $new_template = locate_template(['custom-post-template.php']); if($new_template) return $new_template; } return $template; }
方案2:短代码封装PHP逻辑(灵活度最高,文章/页面/小工具都能调用)
如果不想改模板,要在文章内容的任意位置插入PHP运行结果,直接把代码封装成短代码即可:
- 打开主题目录下的
functions.php文件,在文件末尾加入如下代码:
// 注册自定义短代码 add_shortcode('my_php_block', 'render_my_php_block'); function render_my_php_block(){ // 开启输出缓冲区,捕获PHP代码的输出内容 ob_start(); // 这里粘贴你的2000行PHP代码 // 把缓冲区的内容返回给短代码输出 return ob_get_clean(); }
- 保存文件后,不管是编辑Post还是Page,只需要在内容需要展示PHP运行结果的位置插入短代码
[my_php_block]即可,代码逻辑统一存在主题文件里,不会被WordPress编辑器过滤转义。
方案3:扩展原有内容执行PHP的生效范围(不推荐,安全风险高)
如果你之前是通过functions.php加钩子让Page的编辑器内容支持执行PHP,只需要改一下判断条件就能让Post也生效:
- 找到你之前加的内容过滤代码,一般结构如下:
add_filter('the_content', 'exec_php_in_content', 9); function exec_php_in_content($content){ // 原来的判断是只在Page生效 if(is_page()){ ob_start(); eval('?>' . $content); $content = ob_get_clean(); } return $content; }
- 把判断条件里的
is_page()改成is_singular(['post', 'page']),即可同时支持文章和页面的编辑器内容执行PHP。*注意:这个方案会给编辑器内容开放eval执行权限,一旦有后台编辑权限的账号被盗,或者编辑器被恶意注入内容,会直接导致站点被控制,非必要不要用。
常见踩坑提醒
- 不要直接在WordPress编辑器的内容块里粘贴PHP代码,不管是Post还是Page,WP默认都会把PHP标签转义成普通文本,不会执行,你之前Page能运行绝对不是直接把代码粘在编辑器里实现的。
- 所有代码修改前先备份原文件,尤其是2000行的长代码,先排查语法错误再保存,避免出现全站500错误。
- 如果你用的是第三方主题,所有自定义代码请放到子主题里,否则主题更新后所有自定义修改都会被覆盖。
内容的提问来源于stack exchange,提问作者Hassnain Ali
相关产品推荐
相关产品推荐

