Я начинаю разработку плагинов и слежу за учебниками на сайтах WordPress Codex. Я сейчас застрял - у меня есть база данных под названием "wp_imlisteningto", где wp_
был вставлен с использованием:
$table_name = $wpdb->prefix . "imlisteningto";
Когда плагин активирован.
Сама база данных имеет три столбца, которые настраиваются при активации плагина:
$sql = "CREATE TABLE $table_name (
id mediumint(9) AUTO_INCREMENT,
album VARCHAR(50),
artist VARCHAR(50),
PRIMARY KEY (id)
);";
Я пытаюсь вставить данные (путем создания новой строки) в эту базу данных из php-формы.
Внутри администратора WordPress я создаю новую страницу, которая имеет очень простую форму:
<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>
Который, как вы можете видеть, вызывает formhtml.php
, который:
<?php
global $wpdb;
$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ), array( '$s', '$s' ) );
?>
Когда я отправляю форму, я получаю Error 500.0
при запуске плагина в Worpdress на IIS7.0
и "Page Not Found"
при запуске на другом веб-сервере, который запускает apache
.
Если я изменил formhtml.php
на:
<?php
echo $_POST['album'];
echo $_POST['artist'];
?>
Хорошо работает. Я получаю альбом и исполнителя, которые я вложил в форму. Очевидно, что я ошибаюсь при вставке данных (в новую строку) в базу данных.
Какие-нибудь мысли о том, что это может быть?
ОБНОВИТЬ
Итак, если я обновляю formhtml.php
следующим образом:
<?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' ) );
?>
Я больше не получаю сообщение об ошибке, но данные по-прежнему не попадают в базу данных.
ОБНОВЛЕНИЕ 2
Это сработало для меня:
<?php
require_once('../../../wp-config.php');
global $wpdb;
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ) );
?>
как это сделано:
<?php
require_once('../../../wp-load.php');
global $wpdb;
$table_name = $wpdb->prefix . "imlisteningto";
$wpdb->insert( $table_name, array( 'album' => $_POST['album'], 'artist' => $_POST['artist'] ) );
?>
Итак, по какой-то причине $wpdb
не работал, если мне не требовалось wp-config
или wp-load.php
. Если включить wp-load.php
, $wpdb
получает значения, и все хорошо.