LearnDash LMS:ld_course_list.php文件子主题覆盖失效求助
解决LearnDash ld_course_list.php子主题覆盖失效问题
为什么直接复制路径到子主题没用?
LearnDash的主题模板覆盖机制主要针对前端显示模板(比如课程卡片、学习页面等),而ld_course_list.php属于短代码的核心逻辑文件,这类文件默认不支持直接通过子主题路径覆盖。你尝试的几种路径都不符合LearnDash的模板覆盖规则,所以不会生效。
正确的解决方法
方法1:使用LearnDash的模板过滤器(推荐)
LearnDash提供了learndash_shortcode_template_paths过滤器,可以自定义短代码模板的加载路径。在子主题的functions.php中添加以下代码:
add_filter( 'learndash_shortcode_template_paths', 'awake_custom_ld_course_list_path' ); function awake_custom_ld_course_list_path( $paths ) { // 添加子主题中自定义文件的路径 $paths[] = get_stylesheet_directory() . '/sfwd-lms/includes/shortcodes/'; return $paths; }
然后将ld_course_list.php放到子主题的wp-content/themes/Awake/sfwd-lms/includes/shortcodes/目录下,这样LearnDash会优先加载子主题中的文件。
方法2:复制并修改短代码函数(不推荐,需注意插件更新)
如果过滤器方法无效,你可以复制原插件中ld_course_list短代码的函数,修改后重新注册:
- 打开插件的
ld_course_list.php,复制整个ld_course_list函数(包括函数定义和内部逻辑)。 - 在子主题的
functions.php中,先移除原短代码:remove_shortcode( 'ld_course_list' ); - 然后粘贴复制的函数,修改你需要调整的内容,最后重新注册短代码:
注意:这种方法在LearnDash插件更新后,原函数逻辑可能变化,需要同步更新自定义代码,否则可能出现兼容性问题。add_shortcode( 'ld_course_list', 'awake_custom_ld_course_list' );
验证步骤
- 清空WordPress缓存(包括插件缓存、主题缓存)。
- 刷新前端页面,检查自定义的
ld_course_list.php内容是否生效。
内容的提问来源于stack exchange,提问作者user20821122
相关产品推荐
相关产品推荐

