Плагин генерировал х символов неожиданного вывода, $ wpdb не определен

Я написал простой плагин WordPress для создания новой таблицы базы данных. Новая таблица должна быть создана при активации плагина. Когда я пытаюсь активировать плагин, я получаю следующую ошибку:

The plugin generated 3989 characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin. 

подчеркнутый текст Это, очевидно, результат того, что $ wbdb не определен. xDebug выводит следующее:

 [Mon Feb 04 ] [error] PHP Notice: Undefined variable: wpdb in test.php on line 13 

Весь плагин состоит из следующего:

 <?php /** * Plugin Name: Test Plugin * Plugin URI: http://everybytcaptive.com * Description: A test plugin. * Version: 1.0 * Author: Christopher Green * Author URI: http://everybytecaptive.com */ $test_db_name = $wpdb->prefix . 'test_db_name'; function test_install_plugin() { global $wpdb; global $test_db_name; $sql = "CREATE TABLE " . $test_db_name . " ( `id` int(9) NOT NULL AUTO_INCREMENT, UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } register_activation_hook(__FILE__,'test_install_plugin'); ?> 

У меня нет других плагинов. Почему не определяется $ wpdb? Существует стандартный способ создания новой таблицы базы данных при активации плагина?

Solutions Collecting From Web of "Плагин генерировал х символов неожиданного вывода, $ wpdb не определен"

$wpdb выходит за рамки вашего файла плагина, вам нужен global $wpdb; перед использованием $wpdb->prefix

Ваш плагин пытается получить доступ к $ wpdb до его существования. Вам нужно обернуть его в крючок действия , например:

 <?php /** * Plugin Name: Test Plugin * Plugin URI: http://everybytcaptive.com * Description: A test plugin. * Version: 1.0 * Author: Christopher Green * Author URI: http://everybytecaptive.com */ add_action( 'init', 'test_install_plugin' ); function test_install_plugin() { global $wpdb; global $test_db_name; $test_db_name = $wpdb->prefix . 'test_db_name'; $sql = "CREATE TABLE " . $test_db_name . " ( `id` int(9) NOT NULL AUTO_INCREMENT, UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } // commented out for now, worry about running activation later // register_activation_hook(__FILE__,'test_install_plugin'); 

Я настоятельно рекомендую пожирать все, что вы можете найти в Google, касающееся действий и фильтров в WordPress. Это основные концепции, которые вам нужно полностью понять, чтобы эффективно создавать плагины и темы.