我正在使用 WordPress 插件。我创建了一个自定义表单,用户可以在其中添加值,然后单击提交按钮。当用户单击提交按钮时,它会重定向到自定义流程文件,我在其中编写用于插入和更新数据的查询。
我我的 process.php 文件,首先我打电话 全局 $wpdb ,但我的插入和更新查询不起作用,所以我从网上找到了一个解决方案来要求 config.php 文件在我的进程文件中。
require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');
然后全局 $wpdb 完美地工作。但是 wordpress 存储库说这是非法的。我已经在插件主文件中包含了我的 form.php 文件 index.php ,所以我还包括 process.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()
如果插件封装在一个类中。
您可以为此目的使用多种操作,我主要使用这些操作:
然后代码很简单:
add_action('wp_ajax_mysettingsprocess', 'mySettingsProcess');
//If plugin "is object"
add_action('wp_ajax_mysettingsprocess', array($this, 'mySettingsProcess');
如果这行代码存在于您的插件源中,它将尝试调用
function mySettingsProcess() { ... }
功能。在这个函数中,使用 $wpdb
没有问题。全局变量您还必须为请求提供适当的响应,WP 不会为您执行此操作。表单操作将如下所示:
admin_post_
和 admin_post_nopriv_
:http://{wp_url}/wp-admin/admin-post.php?action=mysettingsprocess data: { action: 'mysettingsprocess' },
所有这些信息在 WP Codex 中有详细描述。 .通常我会使用 WP 内置功能来启动任何插件自定义代码。添加位于 WP 之外的 PHP 源不是一个好习惯。
关于php - $wpdb 在 WordPress 插件文件中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32114812/