Вопрос или проблема
Я использую 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 или просматривать документацию на официальном сайте.