WordPress $ wpdb返回null

时间:2017-10-31 21:49:15

标签: php wordpress

我正在创建一个插件,用于将数据从FTP服务器传输到本地服务器,并使用cron作业更新wp数据库

插件结构如下:

*插件文件夹

  • plugin mainfile.php(注册插件)
  • 数据文件夹
  • class lib文件夹(有3个php类,class1.php,class2.php和class3.php)

现在,在mainfile.php中我使用全局$ wpdb引用$ wpdb,它按预期工作(创建数据库表)。

问题是当我尝试在lib文件夹中的任何类中使用global引用$ wpdb时,它返回NULL。

你可以帮忙:(

这是主插件file.php

中的代码

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

    function FTP_activate(){

    global $wpdb;

    $market_data_table = $wpdb->prefix . "marketData";

    $market_data_table;

    if($wpdb->get_var('SHOW TABLES LIKE ' . $market_data_table) != 
    $market_data_table)
    {
        $sql =  'CREATE TABLE ' . $market_data_table . ' (
                              `PID` int(20) NOT NULL,
                              `field2` varchar(50) NOT NULL,
                              `field3` varchar(50) DEFAULT NULL,
                              `field4` varchar(20) DEFAULT NULL,
                              `field5` varchar(50) DEFAULT NULL,
                              `field6` varchar(15) DEFAULT NULL,
                              `
                              PRIMARY KEY (PID)
                            ) ENGINE=InnoDB DEFAULT CHARSET=utf8';
    }


    dbDelta($sql);




    $image_table = $wpdb->prefix . "marketPhotos";

    if($wpdb->get_var('SHOW TABLES LIKE ' . $image_table) != 
$image_table)
    {
        $sql = 'CREATE TABLE ' .  $image_table . ' (
                              `ID` int(11) NOT NULL,
                              `PID` int(20) NOT NULL,
                              `PhotoNumber` int(11) DEFAULT NULL,
                              `Description` varchar(50) NOT NULL,
                              `FileName` varchar(50) DEFAULT NULL, 
                              PRIMARY KEY (ID)
                            ) ENGINE=InnoDB DEFAULT CHARSET=utf8';
    }

    dbDelta($sql);

}
register_activation_hook(__FILE__, 'FTP_activate');}

require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); function FTP_activate(){ global $wpdb; $market_data_table = $wpdb->prefix . "marketData"; $market_data_table; if($wpdb->get_var('SHOW TABLES LIKE ' . $market_data_table) != $market_data_table) { $sql = 'CREATE TABLE ' . $market_data_table . ' ( `PID` int(20) NOT NULL, `field2` varchar(50) NOT NULL, `field3` varchar(50) DEFAULT NULL, `field4` varchar(20) DEFAULT NULL, `field5` varchar(50) DEFAULT NULL, `field6` varchar(15) DEFAULT NULL, ` PRIMARY KEY (PID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8'; } dbDelta($sql); $image_table = $wpdb->prefix . "marketPhotos"; if($wpdb->get_var('SHOW TABLES LIKE ' . $image_table) != $image_table) { $sql = 'CREATE TABLE ' . $image_table . ' ( `ID` int(11) NOT NULL, `PID` int(20) NOT NULL, `PhotoNumber` int(11) DEFAULT NULL, `Description` varchar(50) NOT NULL, `FileName` varchar(50) DEFAULT NULL, PRIMARY KEY (ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8'; } dbDelta($sql); } register_activation_hook(__FILE__, 'FTP_activate');} 这里是class1.php中的部分代码,我遇到的问题是在lib文件夹中

    class FTPTransfer{
    const FTP_CONNECTION_ERROR = 0;
    const FTP_CONNECTION_SUCSS = 1;
    const FTP_LOGIN_ERROR      = 0;
    const FTP_LOGIN_SUCSS      = 1;

    private $base_data_directory;
    private $new_imgs = array();

    private $ftp_server = "servername";
    private $ftp_username = "username";
    private $ftp_password = "password";

    private $logger;


    public function __construct($base_path){

    global $wpdb;

    $this->base_data_directory = $base_path . "/FTPData";


    }   

    public function ftp_transfer(){


    var_dump($wpdb);

    if(!$ftp = $this->ftpCheckConnection()){
        exit();
    }


    $dir = ftp_pwd($ftp);
    $file_date = date('ymd');
    $img_folder_date = date('Ymd');
    $file_pattern = 'MktData'. $file_date . '_*.csv';
    $img_folder_pattern = 'MktPhotos' . $img_folder_date . '*';


    $temp_file = 'temp.csv';

    $img_folder = ftp_nlist($ftp, $dir.$img_folder_pattern);
    $file = ftp_nlist($ftp, $dir.$file_pattern)[0];

1 个答案:

答案 0 :(得分:0)

$ wpdb无法访问,因为该文件中没有对它进行任何引用。您需要将该文件包含在另一个已调用$ wpdb实例的文件中,例如mainfile.php。或者通过执行类似于此处的操作将$ wpdb直接包含到该文件中... conventions

我的预感是你没有调用任何库文件,所以它们根本不工作。