How to initialize $wpdb?

时间:2012-06-18 作者:Dail

我有一个。主题根目录中的php页面,用于检查一个自定义表单的数据。收到这些数据后,我需要在自定义mysql表中进行查询,所以我需要$wpdb,但我不能直接使用它(或global $wpdb) 因为这是一种物理现象。php文件,因此重写规则不会影响请求(由于文件存在,请求不会传递到index.php)。

那么在这种情况下,如何创建对象$wpdb?

谢谢

5 个回复
最合适的回答,由SO网友:HungryCoder 整理而成

首先,您可能创建了一个不在WP文件保护下的孤立文件。这就是为什么你没有得到wpdb美元。我想你可能没有遵循主题发展的一般规则/惯例。我现在的问题是,您如何访问该文件?

不管怎样,如果您包括wp\\u配置。在您的文件中,您将获得文件中的$wpdb。

考虑到在主题目录下的目录中,下面是如何包含/要求该文件

require_once (\'../../../wp-config.php\');
您可能需要根据您的系统更改路径。

SO网友:sorich87

require_once( \'path/to/wordpress/wp-includes/wp-db.php\' );
if ( file_exists( \'path/to/wordpress/wp-content/db.php\' ) )
    require_once( \'path/to/wordpress/wp-content/db.php\' );

$wpdb = new wpdb( \'user\', \'password\', \'database\', \'host\' );
要了解WordPress是如何初始化它的,请参阅wp includes/load。php,第326行。

SO网友:Francisco Corrales Morales

首先,请注意用户HungryCoder所说的是正确的:your file, is not being liked to WordPress

在您的开发人员和Linux服务器上工作的一个可能的解决方案是:

include( $_SERVER[\'DOCUMENT_ROOT\'] . \'/wp-load.php\');

SO网友:T.Todua

优秀的解决方案是:

my_wpdb(\'test\',\'pass\',  \'database\', \'host\', \'../path/to/wp/\');
功能

function my_wpdb($user, $pass, $db, $host, $path_to_root= \'/../../../../../../\', $run_wp_config=true){
    $path_to_wp=  dirname(__DIR__) .$path_to_root;
  //execute wp-config, if not run already
    if($exec_config && !defined(\'DB_HOST\')){    preg_match(\'/\\<\\?php(.*?)\\/\\* That\\\'s all, stop editing/si\',  file_get_contents($path_to_root."wp-config.php"), $found);    eval($found[1]);    }
    require_once( $path_to_wp.\'wp-includes/wp-db.php\' );    if ( file_exists($path_to_wp.\'wp-content/db.php\' ) ) require_once($path_to_wp.\'wp-content/db.php\' );
    return $GLOBALS[\'wpdb\'] = new wpdb( $user, $pass, $db, $host );
}

SO网友:Jiří

因为在解决这个问题后,立即开始了一个新的问题—将初始化放在哪里(很简单,但如果您不知道这一点,您可能会做一些讨厌的事情—比如尝试修改wp-db.php). 答案有点隐含在@sorich87的答案中,所以让我们在这里明确添加它:

创造db.php “wp content/”文件夹中的脚本。

此外,要获得比抛出全局变量更干净的初始化,请参见https://stackoverflow.com/a/5418972

结束

相关推荐

使用GET_TEMPLATE_PART发布格式Single-loop.php

我已设置为使用标准之外的post格式库和视频。我正在编辑循环单。php为每个帖子格式提供不同的布局,但我要为每个帖子格式包含get\\u template\\u部分。这就是我所拥有的:<?php /** * The loop that displays a single post. * * The loop displays the posts and the post content. See * http://codex.wordpress.or