register_activation_hook не могу понять, что не так!
Нужно создать таблицу в БД для нового плагина. Создание таблицы решил сделать на register_activation_hook, но ничего не вышло. Функция не отрабатывает.
Пробую несколько способов.
Способ 1.
function myplugin_activate() { ?> <div id="message" class="error">myplugin_activate</div> <? } register_activation_hook( __FILE__, 'myplugin_activate' );
Тут я просто хочу увидеть сообщение в админке. Пробовал заменять __FILE__ на название плагина "counter-score".
Способ 2
Функция находится в классе. Класс подключается в основной файл (counter-score.php). Регистрация хука происходит после подключения файла класса.
Как вызываю:
register_activation_hook( 'counter-score', array( '\Simplecov\CounterScore', 'createDBTable' ) );
либо
register_activation_hook( __FILE__, array( '\Simplecov\CounterScore', 'createDBTable' ) );
Что вызываю:
public function createDBTable() { global $wpdb; $tableName = $wpdb->prefix . 'counter_score_plugin'; if($wpdb->get_var("SHOW TABLES LIKE '$tableName'") != $tableName) { $sql = "CREATE TABLE " . $tableName . " ( id mediumint(9) NOT NULL AUTO_INCREMENT, time bigint(11) DEFAULT '0' NOT NULL, name tinytext NOT NULL, text text NOT NULL, url VARCHAR(55) NOT NULL, UNIQUE KEY id (id) );"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); } }
Совершенно запутался!
https://wp-kama.ru/function/register_activation_hook все написано...
Это не помощь, это отписка.
Читал уже, не один раз, хорошо написано. Мне кажется, что я все делаю по инструкции, но нихрена не работает.
Ну ты странно дебажишь. В способе 1 поставь чтоли exit. Потому, что после активации плагина и срабатывания хука "activate_{$plugin}" идёт редирект, вот ты и не видишь свой месседж
Читай еще про dbdelta() - она капризная...
Например функция может не понять UNIQUE KEY...
Дебаг поможет, lifestar указал на ошибку в нем...
Давайте остановимся на первом варианте, второй я уже сильно переделал, по этому смысла обсуждать его нет.
Я просто хочу увидеть сообщение при активации плагина. Можно даже в ДОМ структуре консоли браузера, а не на странице. Что я делаю не так? exit; подставлял
После dbDelta($sql); добавь wp_die(); для дебага... Так увидишь что там за ошибки в dbDelta.
Также, если я не ошибаюсь ты не статический метод вызываешь статически. Сделай его статическим...
Спасибо, можно закрывать.
А что было-то?
Да хрен его знает. Вопрос не решен. Сделал все, что надо в конструкторе. Просто сейчас не до этого.