在WordPress根目录/docs下按用户所属国家创建目录的PHP实现问题
实现WordPress根目录/docs下按用户国家自动创建子目录
看起来你已经摸透了核心需求,我来帮你梳理下整个实现逻辑,顺便解决你之前对basedir的疑问:
需求回顾
我们要在WordPress安装根目录的/docs文件夹下,根据当前登录用户账号绑定的国家元数据(存在用户meta字段location中),自动创建对应该国家名称的子目录;如果目录已经存在,就跳过创建步骤。
初始代码的问题点
你最初的代码里对ABSPATH的用法有误:ABSPATH是WordPress内置的常量,它本身就是一个字符串类型的绝对路径(直接指向WordPress根目录),并不是数组,所以$path['basedir']这种写法是错误的——这也是你困惑basedir的原因。
另外,你原本参考的代码可能是针对WordPress上传目录的场景(wp_upload_dir()会返回包含basedir的数组),但我们这里不需要用到上传目录,直接操作根目录下的docs文件夹就可以了。
可运行的最终代码
<?php $current_user = wp_get_current_user(); $user_id = get_current_user_id(); $key = 'location'; $single = true; $count = get_user_meta( $user_id, $key, $single ); // 直接用ABSPATH拼接根目录下的docs目标路径 $target_dir = ABSPATH . 'docs/' . $count; // 检查目录是否存在,不存在则创建(第三个参数true支持递归创建父目录) if (!is_dir($target_dir)) { echo "made folder"; mkdir($target_dir, 0755, true); }
代码细节说明
ABSPATH:WordPress官方定义的根目录常量,确保路径的准确性,避免手动写路径出现的错误;mkdir($target_dir, 0755, true):第三个参数设为true后,即使/docs目录本身还不存在,也会自动创建这个父目录,再创建子目录;权限0755保证目录可被Web服务器访问,同时兼顾安全性;is_dir():提前判断目录是否存在,避免重复创建的冗余操作,也防止出现报错。
内容的提问来源于stack exchange,提问作者m4c
相关产品推荐
相关产品推荐

