如何在WooCommerce Memberships中强制the_content()返回完整内容?
嘿,这个场景我太熟悉了!WooCommerce Memberships对非会员用户截断内容到55词确实是默认行为,但咱们完全可以通过代码绕过这个限制,给你几个实用的方案:
方案1:直接移除Memberships的内容过滤钩子
Memberships是通过the_content过滤器来实现内容截断的,咱们直接把这个过滤器移除就行。把下面的代码放到子主题的functions.php文件或者自定义插件里:
add_action( 'init', 'remove_memberships_content_filter' ); function remove_memberships_content_filter() { // 先确认插件已加载,避免报错 if ( function_exists( 'wc_memberships' ) ) { // 移除插件对the_content的截断过滤 remove_filter( 'the_content', array( wc_memberships()->get_restrictions_instance(), 'filter_post_content' ), 10 ); } }
这段代码会在网站初始化时,移除Memberships添加的内容限制过滤器,让the_content()始终返回完整的文章内容。
方案2:直接获取原始文章内容(绕过所有过滤器)
如果你不想全局移除限制,只是在特定模板或场景下显示完整内容,可以直接从数据库获取原始内容,再手动应用必要的格式过滤:
// 直接从数据库获取未被过滤的原始文章内容 $full_content = get_post_field( 'post_content', get_the_ID() ); // 应用the_content的常规格式(比如解析短代码、换行等),但跳过Memberships的截断 echo apply_filters( 'the_content', $full_content );
这种方式更灵活,适合在自定义模板、侧边栏或者特定页面中单独使用。
方案3:修改截断长度为超大值(变相显示完整内容)
如果你只是想让截断长度足够大,让所有内容都能显示出来,而不是完全移除限制,可以用这个钩子调整截断长度:
add_filter( 'wc_memberships_restricted_content_excerpt_length', 'custom_memberships_excerpt_length' ); function custom_memberships_excerpt_length( $length ) { // 设置一个远大于常规文章字数的数值,比如9999 return 9999; }
这样插件会认为内容长度没超过限制,自然就会显示完整内容了。
⚠️ 小提醒:
- 优先使用子主题或自定义插件存放代码,避免主题更新导致代码丢失。
- 如果后续Memberships版本更新了钩子名称,可能需要微调代码,但目前这几个方案在最新版插件中都是有效的。
内容的提问来源于stack exchange,提问作者dungey_140
相关产品推荐
相关产品推荐

