Sto avviando lo sviluppo di plug-in e ho seguito i tutorial sui siti di WordPress Codex. Sono ora bloccato - ho un database chiamato "wp_imlisteningto", dove il wp_
stata inserita utilizzando:
$table_name = $wpdb->prefix . "imlisteningto";
Quando il plugin è attivato.
La banca dati stessa ha tre colonne, impostare quando si attiva il plugin:
$sql = "CREATE TABLE $table_name (
id mediumint(9) AUTO_INCREMENT,
album VARCHAR(50),
artist VARCHAR(50),
PRIMARY KEY (id)
);";
Sto cercando di inserire i dati (con la creazione di una nuova riga) in questa base di dati da un modulo php.
All'interno della amministrazione di WordPress, creo una nuova pagina che ha la forma molto semplice:
<form action="/wp-content/plugins/listeningto/formhtml.php" method="post">
Album: <input type="text" name="album" />
Artist: <input type="text" name="artist" />
<input type="submit">
</form>
che come potete vedere le chiamate formhtml.php
, che è:
<?php
global $wpdb;
$wpdb->insert($table_name, array('album' => $_POST['album'], 'artist' => $_POST['artist']), array('$s', '$s'));
?>
Quando presento il modulo, ottengo un Error 500.0
quando si esegue il plug-in in Worpdress su IIS7.0
e un "Page Not Found"
quando si esegue su un altro server Web che esegue apache
.
Se cambio formhtml.php
a:
<?php
echo $_POST['album'];
echo $_POST['artist'];
?>
funziona bene - ho l'album e artista che ho messo in forma. Ovviamente qualcosa che sto facendo male quando si inseriscono i dati (in una nuova riga) nel database.
Qualche idea su cosa potrebbe essere?
UPDATE
Ok, quindi se aggiorno formhtml.php
con questo:
<?php
require_once('../../../wp-config.php');
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert($table_name, array('album' => $_POST['album'], 'artist' => $_POST['artist']), array('$s', '$s'));
?>
ottengo non è più un messaggio di errore, ma i dati ancora non ottiene messo nel database.
UPDATE 2
questo ha funzionato per me:
<?php
require_once('../../../wp-config.php');
global $wpdb;
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert($table_name, array('album' => $_POST['album'], 'artist' => $_POST['artist']));
?>
come ha fatto questo:
<?php
require_once('../../../wp-load.php');
global $wpdb;
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert($table_name, array('album' => $_POST['album'], 'artist' => $_POST['artist']));
?>
Così, per qualche ragione $wpdb
non funzionava a meno che non ho richiesto né wp-config
o wp-load.php
. Se include wp-load.php
, $wpdb
ottiene i valori e tutto va bene.
require_once (ABSPATH. 'Wp-settings.php'); dovrebbe funzionare pure ABSPATH è definito @ wp-load.php – enam