如何使用WP-CLI渲染含短代码的文章为HTML
如何让WP-CLI的get命令渲染短代码为HTML
嘿,这个需求我之前刚好折腾过!WP-CLI 默认执行 wp post get 这类命令时,只会返回原始的文章内容(包含未解析的短代码),不会像前端页面那样自动渲染。不过有几个实用的办法能帮你拿到解析后的HTML,完全模拟用户在浏览器里看到的效果:
方法1:用WP-CLI的eval命令直接调用WordPress内置函数
WordPress本身就提供了do_shortcode()函数来解析短代码,我们可以通过wp eval直接在WP环境中执行PHP代码,实现内容渲染:
比如要获取ID为123的页面的渲染后内容,执行这条命令:
wp eval 'echo do_shortcode(get_post_field("post_content", 123));'
这条命令的逻辑很清晰:
get_post_field("post_content", 123):拿到ID为123的文章原始内容do_shortcode():把内容里的短代码解析成对应的HTMLecho:把解析后的内容输出到终端
如果需要把结果保存到文件,直接加重定向即可:
wp eval 'echo do_shortcode(get_post_field("post_content", 123));' > rendered-content.html
方法2:自定义WP-CLI命令(适合频繁使用)
如果经常需要做这个操作,写个自定义WP-CLI命令会更省心。创建一个PHP文件(比如wp-cli-render-shortcode.php),内容如下:
<?php /** * WP-CLI命令:渲染文章内容中的短代码 */ if (defined('WP_CLI') && WP_CLI) { WP_CLI::add_command('render-content', function($args) { if (empty($args[0])) { WP_CLI::error('请提供文章ID作为参数,比如:wp render-content 123'); return; } $post_id = (int)$args[0]; $content = get_post_field('post_content', $post_id); if (!$content) { WP_CLI::error('找不到ID为' . $post_id . '的文章'); return; } echo do_shortcode($content); }); }
然后每次使用时,通过--require参数加载这个文件并执行命令:
wp --require=wp-cli-render-shortcode.php render-content 123
如果想让这个命令永久生效,可以把文件放到WP-CLI的命令目录(比如~/.wp-cli/commands/),以后直接敲wp render-content 123就能用了。
方法3:模拟完整页面渲染(含主题模板)
如果需要的不只是文章内容,而是整个页面的完整HTML(包括主题的头部、导航、页脚等),可以用下面的命令模拟前端页面的渲染流程:
wp eval ' global $post; $post = get_post(123); setup_postdata($post); // 模拟当前请求的URL(可选,部分短代码依赖这个) $_SERVER["REQUEST_URI"] = get_permalink(123); // 加载主题模板并输出完整页面 include(get_template_directory() . "/single.php"); wp_reset_postdata(); '
这个命令会直接加载主题的single.php模板,完全按照前端页面的逻辑渲染,短代码、主题钩子、样式引用都会被正确处理,输出的就是用户在浏览器里看到的完整HTML。
注意事项
- 有些短代码依赖用户登录状态(比如会员专属内容),可以在
eval代码开头加上wp_set_current_user(1);(1是管理员ID)来模拟登录 - 部分短代码依赖第三方插件,确保对应的插件已经激活,否则解析会失败
- 如果终端输出的HTML有乱码,可以加上
--encoding=utf-8参数,或者直接重定向到文件后查看
内容的提问来源于stack exchange,提问作者Martin Monperrus
相关产品推荐
相关产品推荐

