Фатальная ошибка: класс WP_Customize_Image_Control не найден

Вопрос или проблема

Я использую WAMP на Windows 8.1 64 бита для разработки пользовательской темы.

В данный момент я получаю следующие ошибки при попытке создать пользовательский контроллер с помощью класса WP_Customize_Image_Control:

Фатальная ошибка: Необработанная ошибка: Класс ‘Ivana\Api\Customizer\WP_Customize_Image_Control’ не найден в C:\wamp64\www\ivana-5.2\wp-content\themes\ivana\inc\Api\Customizer\FeaturedCategories.php на строке 115

Ошибка: Класс ‘Ivana\Api\Customizer\WP_Customize_Image_Control’ не найден в C:\wamp64\www\ivana-5.2\wp-content\themes\ivana\inc\Api\Customizer\FeaturedCategories.php на строке 115

Я использую объектно-ориентированный дизайн, взятый из этой стартовой темы: https://github.com/Alecaddd/awps

inc/Api/Customizer.php
пространство имен Ivana\Api;

class Customizer
{
    public function register()
    {
        add_action( 'customize_register', [ $this, 'setup' ] );
    }

    public function get_classes()
    {
        return [
            Customizer\FeaturedCategories::class
        ];
    }

    public function setup( $wp_customize )
    {
        foreach ( $this->get_classes() as $class )
        {

            if ( method_exists( $class, 'register' ) )
            {
                $service = new $class;

                $service->register( $wp_customize );
            }
        }
    }
}

inc/Api/Customizer/FeaturedCategories.php

namespace Ivana\Api\Customizer;

use Ivana\Helpers;

class FeaturedCategories
{
    public function register( $wp_customize )
    {
        $this->add_panels( $wp_customize );
        $this->add_sections( $wp_customize );
        $this->add_settings( $wp_customize );
        $this->add_controls( $wp_customize );
    }

    private function add_panels( $wp_customize )
    {
        $wp_customize->add_panel( 'featured_categories', [
            'title' => 'Избранные категории',
            'description' => 'Я ищу хороший заполнитель',
            'priority' => 100
        ] );
    }

    private function add_sections( $wp_customize )
    {
        $wp_customize->add_section( 'featured_category_0', [
            'title' => 'Избранная категория 1',
            'panel' => 'featured_categories',
            'description' => 'Подсветите категории на своей главной странице.'
        ] );

        $wp_customize->add_section( 'featured_category_1', [
            'title' => 'Избранная категория 2',
            'panel' => 'featured_categories',
            'description' => 'Подсветите категории на своей главной странице.'
        ] );

        $wp_customize->add_section( 'featured_category_2', [
            'title' => 'Избранная категория 3',
            'panel' => 'featured_categories',
            'description' => 'Подсветите категории на своей главной странице.'
        ] );
    }

    private function add_settings( $wp_customize )
    {
        $wp_customize->add_setting( 'category_slug_0', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_slug_1', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_slug_2', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_image_0', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_image_1', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_image_2', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );
    }

    private function add_controls( $wp_customize )
    {
        // var_dump( $wp_customize );
        // echo $wp_customize->registered_control_types;

        $wp_customize->add_control( 'category_slug_2', [
            'section' => 'featured_category_0',
            'label' => 'Слаг категории',
            // 'description' => 'Не животное',
            'type' => 'text'
        ] );

        $wp_customize->add_control( 'category_slug_1', [
            'section' => 'featured_category_1',
            'label' => 'Слаг категории',
            // 'description' => 'Не животное',
            'type' => 'text'
        ] );

        $wp_customize->add_control( 'category_slug_0', [
            'section' => 'featured_category_2',
            'label' => 'Слаг категории',
            // 'description' => 'Не животное',
            'type' => 'text'
        ] );

        $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'category_image_2', [
            'section' => 'featured_category_0',
            'label' => 'Изображение избранной категории 1'
        ] ) );
    }
}

Почему WordPress не может найти класс WP_Customize_Image_Control, или любой из этих классов, в частности? (Также пробовал с цветом и медиа без успеха).

Если вы посмотрите на Customizer.php, метод register вызывает действие 'customize_register', и setup получает $wp_customize.

Это работает идеально, если не пытаться использовать пользовательские контроллеры.

Решено добавлением use WP_Customize_Image_Control; в inc\Customizer\FeaturedCategories.php:

namespace Ivana\Api\Customizer;

    use WP_Customize_Image_Control;
use Ivana\Helpers;

class FeaturedCategories
{
    public function register( $wp_customize )
    {
        $this->add_panels( $wp_customize );
        $this->add_sections( $wp_customize );
        $this->add_settings( $wp_customize );
        $this->add_controls( $wp_customize );
    }

    public function add_panels( $wp_customize )
    {
        $wp_customize->add_panel( 'featured_categories', [
            'title' => 'Избранные категории',
            'description' => 'Я ищу даму',
            'priority' => 100
        ] );
    }

    public function add_sections( $wp_customize )
    {
        $wp_customize->add_section( 'featured_category_0', [
            'title' => 'Избранная категория 1',
            'panel' => 'featured_categories',
            'description' => 'Подсветите категории на своей главной странице.'
        ] );

        $wp_customize->add_section( 'featured_category_1', [
            'title' => 'Избранная категория 2',
            'panel' => 'featured_categories',
            'description' => 'Подсветите категории на своей главной странице.'
        ] );

        $wp_customize->add_section( 'featured_category_2', [
            'title' => 'Избранная категория 3',
            'panel' => 'featured_categories',
            'description' => 'Подсветите категории на своей главной странице.'
        ] );
    }

    public function add_settings( $wp_customize )
    {
        $wp_customize->add_setting( 'category_slug_0', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_slug_1', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_slug_2', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_image_0', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_image_1', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );

        $wp_customize->add_setting( 'category_image_2', [
            'default' => '',
            'transport' => 'postMessage',
            'sanitize_callback' => 'wp_filter_nohtml_kses'
        ] );
    }

    public function add_controls( $wp_customize )
    {
        $wp_customize->add_control( 'category_slug_2', [
            'section' => 'featured_category_0',
            'label' => 'Слаг категории',
            // 'description' => 'Не животное',
            'type' => 'text'
        ] );

        $wp_customize->add_control( 'category_slug_1', [
            'section' => 'featured_category_1',
            'label' => 'Слаг категории',
            // 'description' => 'Не животное',
            'type' => 'text'
        ] );

        $wp_customize->add_control( 'category_slug_0', [
            'section' => 'featured_category_2',
            'label' => 'Слаг категории',
            // 'description' => 'Не животное',
            'type' => 'text'
        ] );

        $wp_customize->add_control( new WP_Customize_Image_Control( $wp_customize, 'category_image_2', [
            'section' => 'featured_category_0',
            'label' => 'Изображение избранной категории 1'
        ] ) );
    }
}

Я нашел решение, скопировав и вставив классы Customizer из исходного кода упомянутой темы (AWPS): https://github.com/Alecaddd/awps/blob/master/inc/Api/Customizer/Footer.php

Ответ или решение

Ошибка "Fatal error: Class WP_Customize_Image_Control not found": Анализ проблемы и решение

В процессе разработки пользовательской темы на платформе WordPress возникает частая ошибка, которая может затруднить дальнейшую работу: "Fatal error: Class ‘WP_Customize_Image_Control’ not found". В этом ответе мы проанализируем причины возникновения этой проблемы и предложим пути ее решения.

1. Причины возникновения ошибки

Ошибка возникает в том случае, когда WordPress не может найти класс WP_Customize_Image_Control. Это может происходить по нескольким причинам:

  • Неопределённый класс: Причиной может быть незнание системы о том, как загружать классы, находящиеся в пространстве имен. В вашем случае класс вызывался, но без соответствующего импорта, что как следствие приводило к данной ошибке.

  • Неправильный порядок загрузки: Возможно, ваш код выполняется до того, как WordPress инициализирует все свои компоненты, в том числе и классы для персонализатора.

2. Как это исправить

Для решения проблемы рекомендуется внести следующие изменения в файл FeaturedCategories.php:

Шаг 1: Импортирование класса

В верхней части вашего файла добавьте следующую строку, чтобы импортировать требуемый класс:

use WP_Customize_Image_Control;

Пример кода с исправлением:

namespace Ivana\Api\Customizer;

use WP_Customize_Image_Control;
use Ivana\Helpers;

class FeaturedCategories
{
    // Остальной код класса...
}

Шаг 2: Проверка порядка выполнения

Убедитесь, что ваша функция регистрации вызвана в нужный момент. Вызов add_action( 'customize_register', [ $this, 'setup' ] ); должен быть выполнен на этапе инициализации, чтобы все необходимые классы были доступны.

3. Проверка конфигурации и окружения

Проверьте, что ваша установка WordPress корректна и натренирована на использование компонента кастомизации:

  • Убедитесь, что у вас установлена актуальная версия WordPress, которая поддерживает кастомизацию. Этот класс был введен в WordPress 4.0.

  • Проверьте, что все установленные файлы и плагины целостны и корректно загружены.

4. Заключение

После применения всех вышеуказанных шагов ошибка должна быть устранена. Проблема с "Не найденным классом" часто связана с пространствами имен и порядком загрузки. Важно правильно управлять зависимостями, что облегчит постоянную работу вашего приложения.

В результате, добавление строки use WP_Customize_Image_Control; решило вашу проблему. Если после исправления ошибка продолжится, перепроверьте на наличие синтаксических ошибок и настройки вашего окружения.

Если у вас остались вопросы или понадобится дополнительная помощь, не стесняйтесь обращаться к сообществу разработчиков WordPress или просматривать документацию на официальном сайте.

Оцените материал
Добавить комментарий

Капча загружается...