单页网站Page内容嵌入求助:替代Posts使用Pages的实现问题
如何在WordPress区块中嵌入指定Page的内容
我来帮你搞定这个问题!你之前的代码其实已经找对了方向,但有几个关键细节没处理到位,导致没达到预期效果。咱们一步步来修正:
先拆解你现有代码的问题
你写的这段代码里:
<?php $page = get_post( 58 ); echo '<h2>'; $title = $page->post_title; echo '</h2>'; $content = apply_filters( 'the_content', $page->post_content ); ?>
存在三个核心问题:
- 你给
$title变量赋了值,但没有输出它,所以页面上只会显示空的<h2></h2>标签 - 处理后的
$content变量也没有echo输出,导致内容完全不会显示 - 缺少对
$page是否存在的判断,如果ID为58的页面被删除/不存在,会直接抛出PHP错误
修正后的基础可用代码
下面是能正常工作的基础版本,补上了输出逻辑和安全判断:
<?php // 获取指定ID的页面(这里ID是58) $page = get_post(58); // 确保页面存在再执行后续逻辑,避免报错 if ($page) { // 输出页面标题,用esc_html转义避免XSS安全问题 echo '<h2>' . esc_html($page->post_title) . '</h2>'; // 处理并输出页面内容:apply_filters会自动解析短代码、转换格式 $content = apply_filters('the_content', $page->post_content); echo $content; } ?>
更灵活的进阶实现(可选)
如果你想通过页面标题而非ID获取内容(避免ID变动导致失效),可以用get_page_by_title():
<?php // 通过页面标题精准获取页面,第二个参数指定为OBJECT,第三个参数限定为page类型 $page = get_page_by_title('你的目标页面标题', OBJECT, 'page'); if ($page) { echo '<h2>' . esc_html($page->post_title) . '</h2>'; echo apply_filters('the_content', $page->post_content); } else { // 页面不存在时的提示(可选) echo '<p>指定的页面未找到,请检查标题是否正确</p>'; } ?>
为什么一定要用apply_filters('the_content')?
直接输出$page->post_content会得到数据库里的原始内容(比如带未解析的短代码、纯文本换行),而通过apply_filters('the_content')可以让WordPress自动处理:
- 解析短代码为实际内容
- 把换行转换为
<p>标签 - 应用主题设置的内容格式
- 执行插件或主题添加的其他内容过滤逻辑
这样嵌入的内容就和你在页面编辑器里看到的效果完全一致了。
内容的提问来源于stack exchange,提问作者ABoooo
相关产品推荐
相关产品推荐

