WordPress中get_the_content无法返回Gutenberg内容,如何获取完整内容?
获取WordPress文章完整post_content原始内容
你遇到的问题是因为WordPress在加载WP_Post对象时,会自动对post_content应用过滤规则,剥离掉块编辑器的注释格式内容。要获取数据库中存储的完整原始内容,可以用以下两种方法:
方法1:直接从数据库查询(最可靠)
通过$wpdb直接查询数据库,绕过WordPress的内容过滤机制:
global $wpdb; $target_post_id = 8349; // 替换为你的文章ID $full_raw_content = $wpdb->get_var( $wpdb->prepare( "SELECT post_content FROM {$wpdb->posts} WHERE ID = %d", $target_post_id ) );
执行这段代码后,$full_raw_content变量就会包含数据库中存储的所有内容,包括那些被HTML注释包裹的块数据。
方法2:临时禁用内容过滤(适用于需要WP_Post对象的场景)
如果必须通过WP_Post对象获取内容,可以临时移除相关过滤钩子,获取后再恢复:
// 移除可能过滤post_content的钩子 remove_filter('the_content', 'wp_kses_post'); remove_filter('post_content', 'wp_kses_post'); // 获取未过滤的WP_Post对象 $post = get_post(8349); $full_raw_content = $post->post_content; // 恢复过滤钩子,避免影响其他功能 add_filter('the_content', 'wp_kses_post'); add_filter('post_content', 'wp_kses_post');
注意:这种方法可能会受主题或第三方插件添加的额外过滤影响,稳定性不如直接数据库查询。
重要提示
获取原始内容后,如果需要在前端显示,务必自行处理内容安全,比如使用wp_kses_post()或其他合适的过滤函数,防止XSS攻击。
内容的提问来源于stack exchange,提问作者Chris Pink
相关产品推荐
相关产品推荐

