$ wpdb无法在WordPress插件的文件中工作

时间:2015-08-20 09:41:06

标签: php wordpress wpdb

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

我的 process.php 文件,首先我调用 global $ wpdb ,但我的插入和更新查询无效,所以我发现net的解决方案需要 config.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") ?>" />

然后全局$ wpdb 完美运行。但wordpress存储库说它是非法的。我已经在插件主文件 index.php 中包含了我的form.php文件,所以我还包括 process.php 并注释require_once代码,但它不起作用。我不知道如何解决这个问题。

这是我的form.php代码:

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

My insert and update queries

这是我的process.php代码:

int temp[6];

对此还有其他解决方案,请帮助我。

非常感谢

1 个答案:

答案 0 :(得分:3)

使用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内置功能来启动任何插件自定义代码。添加生活在WP之外的PHP源代码不是一个好习惯。