serii81
@serii81
Я люблю phр...

"The plugin generated 249 characters of unexpected output during activation"?

Добрый день.
Написал свой первый небольшой плагин, который добавляет код google аналитики на сайт и идентификатор из поля в админке.

И получаю ошибку при активации.

The plugin generated 249 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.


Код плагина

<?php
class GoogleAnalyticsPlugin
{
	function __construct()
	{
		add_action("admin_menu", [$this, "options_page"]);
	}
	function activate()
	{
		global $wpdb;
		$table_name = $wpdb->prefix . "google_analitycs_table";
		if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name) {
			$sql = "CREATE TABLE " . $table_name . "(
					  id int(9) NOT NULL AUTO_INCREMENT,
					  text text NOT NULL,
					  UNIQUE KEY id (id)
					);";
			require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
			dbDelta($sql);
			global $wpdb;
			$table_name = $wpdb->get_blog_prefix() . 'google_analitycs_table';
			$wpdb->insert($table_name, array(
				'text' => 'some',
			), array('%s'));
		}
	}
	function register()
	{
		add_action('admin_enqueue_scripts', [$this, 'enqueue']);
		add_action("wp_ajax_myaction", "so_wp_ajax_function");
		add_action("wp_ajax_nopriv_myaction", "so_wp_ajax_function");
		function so_wp_ajax_function()
		{
			$field_data = $_POST['input_value'];
			if (isset($field_data)) {
				global $wpdb;
				$table_name = $wpdb->get_blog_prefix() . 'google_analitycs_table';
				$wpdb->update($table_name, array('text' => $field_data), array('ID' => 1));
			}
			wp_die(); // ajax call must die to avoid trailing 0 in your response
		}
		$this->setGoogleAnalyticsInHeader();
	}
	public function setGoogleAnalyticsInHeader()
	{
		global $wpdb;
		$table_name = $wpdb->get_blog_prefix() . 'google_analitycs_table';
		$field      = $wpdb->get_var("SELECT text FROM $table_name WHERE id = 1");
		if (isset($field)) {
			add_action('wp_head', function () use ($field) {
				myCallbackToAddGoogle($field);
			});
			function myCallbackToAddGoogle($field)
			{
				$src = "https://www.googletagmanager.com/gtag/js?id=" . $field;
?>
				<!-- Global site tag (gtag.js) - Google Analytics -->
				<script async src="<?php echo $src; ?>"></script>
				<script>
					window.dataLayer = window.dataLayer || [];

					function gtag() {
						dataLayer.push(arguments);
					}
					gtag("js", new Date());

					gtag("config", "<?php echo $field; ?>");
				</script>
<?php
			}
		}
	}
	public function options_page()
	{
		add_menu_page('Web leaders', 'Web leaders', 'edit_others_posts', "web-leaders", [
			$this,
			"render"
		], plugin_dir_url(dirname(__FILE__)) . 'google-analytics-4/assets/images/logo-webleaders-orizzontale-2.svg');
	}
	public function render()
	{
		require plugin_dir_path(dirname(__FILE__)) . 'google-analytics-4/google-analytics-display.php';
	}
	function deactivate()
	{
		global $wpdb;
		$table_name = $wpdb->prefix . "google_analitycs_table";
		// drop the table from the database.
		$wpdb->query("DROP TABLE IF EXISTS $table_name");
	}
	function enqueue()
	{
		wp_enqueue_style('wp-my-style', plugins_url('assets/mystyle.css', __FILE__));
		wp_enqueue_script('wp_myscript', plugins_url('assets/myscript.js', __FILE__), ['jquery'], null, true);
		wp_localize_script('wp_myscript', 'ajax_object', array('ajaxurl' => admin_url('admin-ajax.php')));
	}
}

$googleAnalyticsPlugin = new GoogleAnalyticsPlugin();
$googleAnalyticsPlugin->register();
register_activation_hook(__FILE__, [$googleAnalyticsPlugin, 'activate']);
register_deactivation_hook(__FILE__, [$googleAnalyticsPlugin, 'deactivate']);
?>


Удалил пробелы после закрывающего тега php.

Прописал следующий код, чтобы посмотреть саму ошибку.
add_action('activated_plugin','save_error');
function save_error(){
    update_option('plugin_error',  ob_get_contents());
}
echo get_option('plugin_error')

И получил
WordPress database error: [Table 'host1670806_wpplugin.wp_google_analitycs_table' doesn't exist]
SELECT text FROM wp_google_analitycs_table WHERE id = 1


Выходит, что во время активации срабатывает метод $googleAnalyticsPlugin->register()

Заранее благодарен за подсказку.
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
serii81
@serii81 Автор вопроса
Я люблю phр...
Решил проблему.

Создал метод, чтобы проверить, если существует база данных.
public function checkIfTableExist()
	{
		global $wpdb;
		$table_name = $wpdb->prefix . "google_analitycs_table";
		if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") === $table_name) {
			return true;
		}
		return false;
	}


И потом проверил.

if ($googleAnalyticsPlugin->checkIfTableExist()) {
	$googleAnalyticsPlugin->register();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 20:43
20000 руб./за проект
19 апр. 2024, в 20:11
500 руб./за проект