Создаю плагин для wordpress, который при активации будет создавать ячейку 'post_views' в таблице 'wp_posts', а при деактивации удалять её. Столкнлулся с проблемой: При активации плагина выводит ошибку:
The plugin generated 18375 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.
А дебагер выводит:
Level:Notice Message:Undefined offset: 0
Но таблица создалась. После деактивации таблица не удаляется. Прошу найти ошибки в моём коде. Я всего-лишь учусь, прошу строго не судить.
Index.php
global $wpdb;
define( 'PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'PLUGIN_DIR_CLASSES', IBRYL_DIR . '/includes/classes/' );
require_once (PLUGIN_DIR_CLASSES."PluginController.php");
PluginController::start($wpdb);
class ControllerPlugin.php
require_once ("PluginDefault.php");
class PluginController {
public static function start($wpdb) {
register_activation_hook( PLUGIN_DIR, PluginDefault::activate($wpdb) );
register_deactivation_hook( PLUGIN_DIR, PluginDefault::uninstall($wpdb) );
}
}
class PluginDefault.php
// в коментах написаны решения, которые искал в интернете, ничего не помогло
class PluginDefault {
public static function activate($wpdb) {
$row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'wp_posts' AND column_name = 'post_views'" );
if ( empty( $row ) ) {
// SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER';
// $wpdb->query( "SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER';" );
$wpdb->query( "ALTER TABLE wp_posts ADD post_views INT(11) NOT NULL DEFAULT 0;" );
}
}
public static function deactivate( $wpdb ) {
$row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'wp_posts' AND column_name = 'post_views'" );
if ( empty( $row ) ) {
// SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER';
$wpdb->query( "ALTER TABLE wp_posts DROP post_views;" );
}
}
public static function uninstall( $wpdb ) {
$row = $wpdb->get_results( "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'wp_posts' AND column_name = 'post_views'" );
if ( empty( $row ) ) {
// SET SESSION sql_mode="NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER";
// $wpdb->query( "SET SESSION sql_mode='NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER';" );
$wpdb->query( "ALTER TABLE {$wpdb->prefix}posts DROP post_views ;" );
}
}
}
Такая ошибка встречается при ошибки во время активации плагина. Плохая идея добавить колонку в таблицу wp_posts
, лучше использовать стандартную схему WordPress и хранить post_views в wp_postmeta
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Впервые делаю сайт на локальном сервере, так как в некоторых случаях мне нужно написать что-то на phpВ видео-уроках показано, что создавать...
Господа и дамы! Как вывести пользователя у кого больше выполненных заданийТаблица users и таблица quests_active (сюда записываются id заданий и id пользователей)...