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.
Также, если я не ошибаюсь ты не статический метод вызываешь статически. Сделай его статическим...
Спасибо, можно закрывать.
А что было-то?
Да хрен его знает. Вопрос не решен. Сделал все, что надо в конструкторе. Просто сейчас не до этого.