В Wordpress есть несколько довольно глупых вещей, происходящих по всему OO-коду, с которыми я сталкиваюсь не впервые, когда мы углубляемся во внутренности с каждым последующим проектом в Moxune . См. WP_User :: __set не сохраняет настраиваемые поля, поскольку утверждает .
Глупость, на которую я здесь ссылаюсь, конечно, заключается в том, что что-то вроде префикса таблицы, aka wpdb::prefix
, является public
переменной-членом, однако такие вещи, как dbname
, dbpassword
и dbhost
, являются protected
и public
методы доступа отсутствуют.
Я уверен, что один из основных разработчиков Wordpress попытается найти какое-то обоснование для этого, но в то же время он может также использовать несколько хороших OO, чтобы справиться с ситуацией. Мое предложение, декоратор.
class SaneDb
{
private $_oDb;
public function __construct(wpdb $oDb)
{
$this->_oDb = $oDb;
}
public function __get($sField)
{
if($sField != '_oDb')
return $this->_oDb->$sField;
}
public function __set($sField, $mValue)
{
if($sField != '_oDb')
$this->_oDb->$sField = $mValue;
}
public function __call($sMethod, array $aArgs)
{
return call_user_func_array(array($this->_oDb, $sMethod), $aArgs);
}
public function getDbName() { return $this->_oDb->dbname; }
public function getDbPass() { return $this->_oDb->dbpassword; }
public function getDbHost() { return $this->_oDb->dbhost; }
}
Затем поверх кода вашего плагина ( functions.php ) установите global
в том же ключе, что и wpdb
.
global $sanedb;
$sanedb = new SaneDb($wpdb);
Оттуда, просто используйте $sanedb
в вашем плагине вместо $wpdb
.
И, наконец, получение имени базы данных и др.
$sanedb->getDbName();