WordPress如何通过URL调用functions.php中定义的函数
WordPress访问自定义URL触发指定函数实现方案
你不需要修改WordPress核心文件,只需要在主题的functions.php中追加少量代码、刷新固定链接规则即可实现需求。
具体操作步骤
- 保留你已经写好的
folder_contents函数,在同文件内追加重写规则注册、请求拦截的相关代码,完整代码参考如下:
// 注册自定义路径的重写规则 add_action('init', function () { add_rewrite_rule('^folder_contents/?$', 'index.php?custom_action=folder_contents', 'top'); }); // 注册自定义查询参数,避免被WordPress过滤 add_filter('query_vars', function ($vars) { $vars[] = 'custom_action'; return $vars; }); // 拦截前端请求,匹配到目标路径时直接执行对应函数 add_action('parse_request', function ($wp) { if (array_key_exists('custom_action', $wp->query_vars) && $wp->query_vars['custom_action'] === 'folder_contents') { folder_contents(); exit; } }); // 你原有编写的函数无需修改,保留即可 function folder_contents() { echo "Hello world"; // 此处填写你的业务逻辑代码 die(); }
- 代码添加完成后,登录WordPress后台,进入「设置」-「固定链接」页面,不需要调整任何现有配置,直接点击页面底部的「保存更改」按钮,刷新重写规则,否则访问目标路径会返回404错误。
注意事项
禁止通过直接访问主题目录下
functions.php文件路径的方式运行代码,这种方式不会加载WordPress核心运行环境,所有依赖WP内置能力的函数都会报错,同时存在严重安全隐患。
简易替代方案
如果你对URL的纯路径格式没有强制要求,可以用WordPress内置的公开动作钩子实现,不需要刷新固定链接,代码量更少:
// 支持已登录、未登录的所有访客访问触发 add_action('wp_ajax_nopriv_folder_contents', 'folder_contents'); add_action('wp_ajax_folder_contents', 'folder_contents');
配置完成后访问地址为http://myurl.com/wp-admin/admin-post.php?action=folder_contents即可直接触发对应函数。
内容的提问来源于stack exchange,提问作者Amy
相关产品推荐
相关产品推荐

