Получаю ошибку связанную с заголовком

102
29 августа 2021, 08:30

Создаю плагин для 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 ;" );
        }
    }
}
Answer 1

Такая ошибка встречается при ошибки во время активации плагина. Плохая идея добавить колонку в таблицу wp_posts, лучше использовать стандартную схему WordPress и хранить post_views в wp_postmeta

READ ALSO
Как прикрепить метод Controller к роуту?

Как прикрепить метод Controller к роуту?

Всем приветНачал потихоньку разбиратся с MVC

204
Open server создание страниц

Open server создание страниц

Впервые делаю сайт на локальном сервере, так как в некоторых случаях мне нужно написать что-то на phpВ видео-уроках показано, что создавать...

360
Определить у кого больше записей php

Определить у кого больше записей php

Господа и дамы! Как вывести пользователя у кого больше выполненных заданийТаблица users и таблица quests_active (сюда записываются id заданий и id пользователей)...

93