Wordpress a quelque chose d'assez maladroit qui se passe tout au long de son code OO, ce n'est pas le premier que j'ai rencontré comme nous creusons plus profondément dans les internes avec chaque projet successif au Moxune. Voir WP_User::__set doesn't persist custom fields as it claims.
Le goofiness Je me réfère ici est bien sûr que quelque chose comme le préfixe de table, alias wpdb::prefix
est une variable membre public
, mais des choses comme dbname
, dbpassword
et dbhost
sont protected
et il n'y a pas public
méthodes accesseurs. Je suis sûr que l'un des développeurs principaux de Wordpress essaiera d'argumenter une certaine logique pour cela, mais en attendant peut aussi bien utiliser quelques bons OO pour faire face. Ma suggestion, un décorateur.
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; }
}
Ensuite, au sommet de votre code plug-in (functions.php) d'installation d'un global
dans la même veine à wpdb
.
global $sanedb;
$sanedb = new SaneDb($wpdb);
À partir de là, il suffit d'utiliser $sanedb
au sein de votre plug-in au lieu de $wpdb
.
Enfin, obtenir le nom de la base de données et al.
$sanedb->getDbName();
Pourquoi ne pas simplement réutiliser la connexion à la base de données actuelle? –
@ Pekka- Je fais un appel système PHP() mysqldump-je dois passer dans ces variables. – Yarin