$wpdb selects wrong database

时间:2018-03-21 作者:Agis Soleas

我在另一个WordPress网站的文件夹中创建了一个新的WordPress网站。

示例-主站点。com-mainsite。com/第二站点

我创建了一个插件,并使用$wpdb 将数据插入数据库,插件将数据插入第一个/父站点的数据库。

我使用的代码包括$wpdb 如下所示:

$path = $_SERVER[\'DOCUMENT_ROOT\'];
include $path . \'/wp-load.php\';
include $path . \'/wp-config.php\';
include $path . \'/wp-includes/wp-db.php\';
global $wpdb;
我怎样才能解决这个问题?

2 个回复
SO网友:Jacob Peattie

$_SERVER[\'DOCUMENT_ROOT\']; 不包括secondsite. 所有文件,包括wp-config.php 与数据库详细信息一起,都来自根公共目录。

要获取当前目录(包括子目录),请使用以下任一选项:

getcwd();

dirname(__FILE__);

basename(__DIR__);
但如果您的文件位于更深的文件夹中,则无法找到secondsite 目录而不指定它(或扫描目录以查找WordPress安装)。因此,您需要手动指定它,如下所示:

$path = $_SERVER[\'DOCUMENT_ROOT\'] . \'/secondsite\';
但您的问题是,您在做AJAX时出错了。您不应该直接向插件中的文件发送AJAX请求。你应该是using the AJAX hooksadding a custom endpoint to the REST API.

SO网友:Krzysiek Dróżdż

您的代码存在到个主要问题。

第一个是,您清楚地包括了主/父WordPress的文件:

$path = $_SERVER[\'DOCUMENT_ROOT\'];
include $path . \'/wp-load.php\';
include $path . \'/wp-config.php\';
代码的上述部分将包括主站点。com/wp配置。php,所以您的其余代码将连接到该站点的DB-这就是您的代码应该做的。。。

如果要连接到正确的DB,则应使用以下内容:

$path = $_SERVER[\'DOCUMENT_ROOT\'] . \'/secondsite\'; // <- change it to proper folder name
include $path . \'/wp-load.php\';
include $path . \'/wp-config.php\';
include $path . \'/wp-includes/wp-db.php\';

global $wpdb;
现在,当在secondsite上使用时,它将连接到正确的DB,但是。。。This code still isn\'t correct...

您不应该创建以这种方式处理请求的PHP文件。所有AJAX请求都应由wp-admin/admin-ajax.php 或者通过REST API。

下面是Codex的一篇文章,解释了如何在插件中正确使用AJAX:https://codex.wordpress.org/AJAX_in_Plugins

结束

相关推荐

无法访问$wpdb,返回空

我正在使用Wordpress插件样板开发一个相当简单的插件。利用AJAX,我设置了一个基于按钮按下的操作,该操作应该从我设置的自定义数据库表中删除一个项。AJAX工作,按钮工作,对操作PHP文件的调用工作。该调用位于我的插件的admin partials文件夹中,大多数插件操作都发生在该文件夹中,看起来是这样的(“txtHint”是我使用的教程的一个工件):function ajax_function(str) { var parsed = str.slice(19); var xml