Wordpress / PHP - Пространства имен / Автозагрузчик - Неустранимая ошибка: Uncaught TypeError: call_user_func_array (): Аргумент № 1 ($ function) должен быть допустимым обратным вызовом

Я создаю свой первый плагин полностью с нуля. Всякий раз, когда я пытаюсь добавить пространство имен в файл template-plugin-activate.php, я получаю следующую ошибку:

Plugin could not be activated because it triggered a fatal error.
Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($function) must be a valid callback, class "TemplatePluginActivate" not found in C:\xampp\htdocs\wordpress\wp-includes\class-wp-hook.php:292 Stack trace: #0 C:\xampp\htdocs\wordpress\wp-includes\class-wp-hook.php(316): WP_Hook->apply_filters('', Array) #1 C:\xampp\htdocs\wordpress\wp-includes\plugin.php(484): WP_Hook->do_action(Array) #2 C:\xampp\htdocs\wordpress\wp-admin\plugins.php(193): do_action('activate_templa...') #3 {main} thrown in C:\xampp\htdocs\wordpress\wp-includes\class-wp-hook.php on line 292

Ниже мои файлы. Любая помощь приветствуется.

// inc / template-plugin.php

<?php

namespace Inc;

class TemplatePluginActivate
{
   public static function activate() {
      flush_rewrite_rules();
   }
}

// шаблон-plugin.php

defined( 'ABSPATH' ) or die( 'You can\t access this file.' );

if ( file_exists( dirname( __FILE__ ) . '/vendor/autoload.php' ) ) {
    require_once dirname( __FILE__ ) . '/vendor/autoload.php';
}

use Inc\TemplatePluginActivate;

if ( !class_exists( 'TemplatePlugin' ) ) {

    class TemplatePlugin
    {
        //
    }
}

require_once plugin_dir_path( __FILE__ ) . 'inc/template-plugin-activate.php';
register_activation_hook( __FILE__, array( 'TemplatePluginActivate', 'activate' ) );

require_once plugin_dir_path( __FILE__ ) . 'inc/template-plugin-deactivate.php';
register_activation_hook( __FILE__, array( 'TemplatePluginDeactivate', 'deactivate' ) );

// composer.json

{
    "name": "author/template-plugin",
    "description": "awesome starter plugin example",
    "type": "project",
    "license": "GPL",
    "authors": [
        {
            "name": "author",
            "email": ""
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "autoload": {
        "psr-4": {"Inc\\": "./inc"}
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
8
1

Ответы 1

Проблема с register_activation_hook().

Ваш обратный вызов - это метод activate() класса TemplatePluginActivate. Это необходимо обновить, как только вы введете пространства имен. Класс будет Inc\TemplatePluginActivate.

register_activation_hook( __FILE__, array( 'Inc\TemplatePluginActivate', 'activate' ) );

Кроме того, действие деактивации также выполняется при активации. Вам понадобится крючок register_deactivation_hook().

Спасибо за помощь. Я все еще не могу использовать: используйте Inc \ TemplatePluginActivate в файле template-plugin.php. Я не правильно использую автозагрузку?

LAF_OUT_LOUD 10.04.2021 06:57

Другие вопросы по теме