用户反馈了一个关于 Masterstudy LMS 使用自带编辑器编辑课程时页面404无法打开的问题。
测试排查后发现编“Edit with Course Builder
”这个编辑按钮的链接地址是这样的“/用户账户edit-course/1072/
”。很明显这个链接太奇怪了,怀疑是我翻译出了问题,但是检查后发现并没有问题。
在另一个站里面进行全新安装测试,发现这个站是可以正常打开课程编辑页面的,并且编辑按钮的链接地址也变正常了。“/用户账户/edit-course/1072/
”
于是我尝试在第一个站点中手动补上斜杠后进行测试,发现还是404。两个站用的主题版本、插件版本、翻译文件也是用的一样的,所以现在可以排除插件自身问题和翻译文件问题。
于是继续排查,找到“用户账户
”这个页面,发现这个页面地址本身就没有尾部的斜杠,于是确定是固定链接格式的问题,果然修改以后问题得到解决。
题外话:其实这个问题不怪客户,责任在开发者,应该在代码层面对这个固定链接的斜杠问题进行适配的。代码层面不优化的话就会导致无法使用.html
这种格式的伪静态。自己改代码的话,后续插件每次更新后都要自己再手动改也是很麻烦的一件事。
方法二:代码层面解决该问题
如果你就是想使用/%post_id%.html
这种固定链接格式的话,可以参考下面教程自己改一行代码即可解决,缺点是如果官方不修复的话,后续每次更新该插件你都要再自己手动改代码。
文件路径:/wp-content/plugins/masterstudy-lms-learning-management-system/_core/lms/helpers.php
搜索查找下面原代码:
function ms_plugin_user_account_url( $sub_page = '' ) { $settings = get_option( 'stm_lms_settings', array() ); $account_page_id = apply_filters( 'wpml_object_id', $settings['user_url'] ?? null, 'post' ); if ( empty( $account_page_id ) || ! did_action( 'init' ) ) { return home_url( '/' ); } $user_account_url = get_the_permalink( $account_page_id ); if ( ! empty( $sub_page ) ) { $user_account_url .= "$sub_page/"; } return $user_account_url; }
修改后的代码为:
function ms_plugin_user_account_url( $sub_page = '' ) { $settings = get_option( 'stm_lms_settings', array() ); $account_page_id = apply_filters( 'wpml_object_id', $settings['user_url'] ?? null, 'post' ); if ( empty( $account_page_id ) || ! did_action( 'init' ) ) { return home_url( '/' ); } $user_account_url = get_the_permalink( $account_page_id ); $user_account_url = rtrim($user_account_url, '/') . '/';//新增代码 if ( ! empty( $sub_page ) ) { $user_account_url .= "$sub_page/"; } return $user_account_url; }
在这段代码中,我使用了PHP的 rtrim
函数来确保 $edit_url
不会以多余的斜杠结尾,然后添加了一个斜杠。这样做可以确保无论原始 $user_account_url
是否已经有斜杠,最终的URL总是正确的。
评论0