$wpdb在WordPress插件文件中不工作


$wpdb not working in file of WordPress plugin

我在WordPress插件工作。我创建了一个用户添加值的自定义表单,然后单击提交按钮。当用户点击提交按钮时,它会重定向到自定义进程文件,在那里我编写插入和更新数据的查询。

我的process.php文件,首先我调用全局$wpdb,但我的插入和更新查询不工作,所以我找到了一个解决方案,从网络要求config.php文件在我的进程文件。

require_once( str_replace('//', '/', dirname(__FILE__) . '/') . '../../../wp-config.php');

然后global $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()函数期间注册一个动作。有几个操作可以用于此目的,我主要使用这些:

  • 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不会为您做这些。

表单动作看起来像这样:

  • admin_post_admin_post_nopriv_: http://{wp_url}/wp-admin/admin-post.php?action=mysettingsprocess
  • 如果使用JS/JQuery和AJAX添加到data: { action: 'mysettingsprocess' },

所有这些信息在WP Codex中有详细描述。一般来说,我会使用WP内置的功能来启动任何插件自定义代码。