WordPress как на ладони
wordpress jino

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);
		}
	}

Совершенно запутался!

0
simplecov 3 месяца назад
  • 0
    Kama4464
    simplecov 3 месяца назад

    Это не помощь, это отписка.
    Читал уже, не один раз, хорошо написано. Мне кажется, что я все делаю по инструкции, но нихрена не работает.

    lifestar 3 месяца назад

    Ну ты странно дебажишь. В способе 1 поставь чтоли exit. Потому, что после активации плагина и срабатывания хука "activate_{$plugin}" идёт редирект, вот ты и не видишь свой месседж

    Kama 3 месяца назад

    Читай еще про dbdelta() - она капризная...

    Например функция может не понять UNIQUE KEY...

    Дебаг поможет, lifestar указал на ошибку в нем...

    simplecov 3 месяца назад

    Давайте остановимся на первом варианте, второй я уже сильно переделал, по этому смысла обсуждать его нет.
    Я просто хочу увидеть сообщение при активации плагина. Можно даже в ДОМ структуре консоли браузера, а не на странице. Что я делаю не так? exit; подставлял

    Kama 3 месяца назад

    После dbDelta($sql); добавь wp_die(); для дебага... Так увидишь что там за ошибки в dbDelta.

    Также, если я не ошибаюсь ты не статический метод вызываешь статически. Сделай его статическим...

    simplecov 3 месяца назад

    Спасибо, можно закрывать.

    Kama 3 месяца назад

    А что было-то?

    simplecov 2 месяца назад

    Да хрен его знает. Вопрос не решен. Сделал все, что надо в конструкторе. Просто сейчас не до этого.

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Регистрация. Вход.