J'ai une classe qui a une fonction qui vérifie et crée la table dans la base de données. Pour ce faire, je dois utiliser l'objet WordPress $ wpdb.
J'ai besoin que la fonction ne s'exécute que lors de la première activation du plugin, donc j'utilise la fonction:
register_activation_hook ( __FILE__, array( 'MemorialCandles', 'dbInstall' ) );
Le problème est que je reçois toujours cette erreur:
Erreur fatale: Utilisation de $ this lorsque vous n'êtes pas dans le contexte de l'objet dans /home/xxx/xxx/wordpress/wp-content/plugins/MemorialCandles/memorial-candles.class.php à la ligne 77
le code de la classe:
<?php
// Global Variables:
global $wpdb;
register_activation_hook ( __FILE__, array( 'MemorialCandles', 'dbInstall' ) );
/**
* Class: MemorialCandles
*
* Provides skeleton to the plugin and handles queries and action.
*
* @author Dor Zuberi <[email protected]>
* @copyright 2011 Dor Zuberi
* @license http://www.php.net/license/3_01.txt
*/
class MemorialCandles
{
// Variables
/**
* @var string stores plugin direction - RTL or LTR.
*/
private $pluginDirection;
/**
* @var string stores the plugin database table name.
*/
private $tableName;
// Constructor
/**
* Initiates the plugin, stores and configure the basic setup procedures.
*
* @return void
*/
function __construct()
{
global $wpdb;
$this->tableName = $wpdb->prefix . 'memorialcandles';
}
// Getters
// Setters
// Methods
/**
* Handles the database table creation.
*
* @return void
*/
function dbInstall()
{
global $wpdb;
if( $wpdb->get_var( "SHOW TABLES LIKE `{$this->tableName}`" ) != $this->tableName )
{
$sql = "CREATE TABLE `{$this->tableName}` (
id int(8) NOT NULL AUTO_INCREMENT,
fullName text NOT NULL,
message text NOT NULL,
postDate text NOT NULL,
galleryID int(8) NOT NULL,
UNIQUE KEY id(id)
);";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
}
}
/**
* Handles the database table drop procedure.
*
* @return void
*/
function dbUninstall()
{
global $wpdb;
$sql = "DROP TABLE IF EXISTS `{$this->tableName}`;";
$wpdb->query( $sql );
}
}
?>
Merci d'avance! :RÉ
Essayer:
register_activation_hook ( __FILE__, array( new MemorialCandles(), 'dbInstall' ) );
Ou définissez dbInstall comme "statique" et utilisez-le pour définir le nom de la table à la place du constructeur, ce qui, à mon avis, est la meilleure approche.
Ok nouvelle réponse, et cette fois une solution de travail testée. commencez par créer une instance de votre classe et ensuite seulement appelez votre register_activation_hook
pour obtenir quelque chose comme:
$MemorialCandles = NEW MemorialCandles();
register_activation_hook ( __FILE__, array( 'MemorialCandles', 'dbInstall' ) );