我正在使用 WordPress 插件。我创建一个自定义表单,用户在其中添加值,然后单击提交按钮。当用户单击提交按钮时,它会重定向到自定义流程文件,我在其中编写用于插入和更新数据的查询。
I my 进程.php文件,首先我打电话全局 $wpdb,但是我的插入和更新查询不起作用,所以我从网上找到了一个解决方案来要求配置文件文件在我的进程文件中。
require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');
Then 全局 $wpdb工作完美。但 WordPress 存储库表示这是非法的。我已经将我的 form.php 文件包含在插件主文件中索引.php,所以我还包括进程.php并注释 require_once 代码,但它不起作用。我不知道如何解决这个问题。
这是我的 form.php 代码:
<form method="post" action="<?php echo plugin_dir_url(__FILE__); ?>settings_process.php">
<input type="text" name="post_name_slug" id="post_name_slug" value="<?php echo POST_NAME_SLUG ?>" />
<input type="submit" name="save_settings" value="<?php _e("Save Changes","abc") ?>" />
这是我的 process.php 代码:
require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');
global $wpdb;
My insert and update queries
那么有没有其他解决方案,请帮助我。
多谢
使用 WP 操作可以解决您的问题。您的问题是您没有给 WP 机会来完成它的生命周期并加载所有必要的源。通过包含配置文件来调整它并不是一个好方法。您可以在插件加载期间注册一个操作或__construct()
如果插件封装在类中,则函数。
您可以使用多种操作来实现此目的,我主要使用这些:
- wp_ajax_{action_name} - 如果使用 AJAX
- admin_post_{action_name} - 如果请求来自 wp-admin 中的登录用户
- admin_post_nopriv_{action_name} - 如果有人可以执行此请求
那么代码就很简单了:
add_action('wp_ajax_mysettingsprocess', 'mySettingsProcess');
//If plugin "is object"
add_action('wp_ajax_mysettingsprocess', array($this, 'mySettingsProcess');
如果这行代码存在于您的插件源中,它将尝试调用function mySettingsProcess() { ... }
功能。在这个函数中你使用不会有问题$wpdb
全局变量您还必须对请求提供适当的回复,WP 不会为您做这件事。
表单操作将如下所示:
- for
admin_post_
and admin_post_nopriv_
:http://{wp_url}/wp-admin/admin-post.php?action=mysettingsprocess
- 如果使用 JS/JQuery 和 AJAX 添加到
data: { action: 'mysettingsprocess' },
所有这些信息都详细描述在WP Codex https://codex.wordpress.org/。一般来说,我会使用 WP 内置功能来启动任何插件自定义代码。添加位于 WP 之外的 PHP 源并不是一个好的做法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)