создать подстраницу меню – ошибка: функция не найдена или недопустимое имя функции

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

Я создал плагин с верхнеуровневой страницей. Я создал подменю под ней. Когда я запускаю плагин на своем сайте, все работает. Но когда я тестирую его на отдельном сайте, я получаю ошибку и не могу понять почему.

Вот код, о котором идет речь, и ошибка, которая возникает. Я никак не могу понять, откуда возникает ошибка.

function custom_plugin_add_menu_page(){

     add_menu_page( 'My Custom Plugin', 
                         'My Custom Plugin', 
                         'manage_options', 
                         'top_level_parent_page', 
                         'top_level_parent_page',
                         plugins_url( '/my-custom-plugin/includes/images/menu-icon.png' )
                         );                           

     add_submenu_page( 
        'top_level_parent_page', 
        'Custom Submenu Page', 
        'Custom Submenu Page',
        'manage_options', 
        'custom_plugin_submenu_page', 
        'custom_plugin_submenu_page_callback' 
    );                  
}
add_action('admin_menu', 'custom_plugin_add_menu_page');

и ошибка:

Warning: call_user_func_array() expects parameter 1 to be a valid
callback, function ‘custom_plugin_submenu_page_callback’ not found or
invalid function name in
D:\xampp\htdocs\localtestsite\wp-includes\plugin.php on line 429

Похоже, если вы используете классы, нужно использовать array($this, $function); в элементе функции, как показано ниже.

add_submenu_page( $mainmenu_slug, $submenu_title, $submenu_label, $capability, $submenu_slug , array($this, $submenu_function) );   

проблема 1

Вы должны объявить функцию custom_plugin_submenu_page_callback, которую вы передаете туда.

function custom_plugin_submenu_page_callback()
{ ?>
   hellooooo
<?php
}

очевидно, у вас она есть на одном сайте (возможно, в functions.php), а на другом сайте ее нет (или просто там отключены ошибки).

проблема 2

У вас некорректный аргумент в add_menu_page – шестой аргумент должен быть именем функции, а не именем иконки. Вы не получаете ошибку на другом сайте, потому что вероятно там отключены ошибки.

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

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

Теория

При разработке плагинов для WordPress часто возникает необходимость в создании меню или подменю в административной панели. Для этого используются функции add_menu_page() и add_submenu_page(), однако важно понимать, что данные функции требуют корректного определения всех передаваемых им параметров. Если один из параметров, обычно это имя функции обратного вызова (callback function), указан неверно или функция не определена, WordPress выдает ошибку, связанную с неверным или несуществующим именем функции.

Пример

Рассмотрим следующий код, который иллюстрирует процесс добавления страницы и подстраницы меню:

function custom_plugin_add_menu_page(){

     add_menu_page( 
         'My Custom Plugin', 
         'My Custom Plugin', 
         'manage_options', 
         'top_level_parent_page', 
         'top_level_parent_page_callback',
         plugins_url( '/my-custom-plugin/includes/images/menu-icon.png' )
     );                           

     add_submenu_page( 
        'top_level_parent_page', 
        'Custom Submenu Page', 
        'Custom Submenu Page',
        'manage_options', 
        'custom_plugin_submenu_page', 
        'custom_plugin_submenu_page_callback' 
    );                  
}
add_action('admin_menu', 'custom_plugin_add_menu_page');

function top_level_parent_page_callback() {
    echo '<h1>Добро пожаловать в My Custom Plugin</h1>';
}

function custom_plugin_submenu_page_callback() {
    echo '<h1>Это моя пользовательская подстраница плагина</h1>';
}

В этом примере осуществляется добавление верхнего уровня страницы меню и подстраницы плагина. Функции обратного вызова top_level_parent_page_callback и custom_plugin_submenu_page_callback используются для вывода HTML содержимого на соответствующих страницах.

Применение

Теперь давайте разберем два аспекта, которые могли привести к возникновению проблемы, описанной в вопросе.

Проблема 1: Отсутствие функции обратного вызова

Часто возникающая ошибка "function not found or invalid function name" указывает на то, что WordPress не находит функцию, отвечающую за отображение содержимого подстраницы. В вашем случае функция custom_plugin_submenu_page_callback не определена на сайте, где проявляется ошибка. Решением этой проблемы будет добавление определения данной функции в код плагина. Убедитесь, что код для этой функции добавлен на всех сайта, где используется ваш плагин.

Проблема 2: Некорректные параметры функции add_menu_page

Другой аспект, который вызывает ошибку, это некорректные аргументы, передаваемые в функцию add_menu_page(). В частности, шестой аргумент этой функции (в вашем случае plugins_url( '/my-custom-plugin/includes/images/menu-icon.png' )) должен содержать имя функции обратного вызова, а не URL иконки. Исправьте данный аргумент на имя функции, например, top_level_parent_page_callback, чтобы избежать ошибок. Добавление иконки должно быть отдельным явным аргументом.

Дополнительные рекомендации

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

  2. Использование классов: Если вы используете ООП-подход, убедитесь, что имена методов и их вызовы соответствуют правилу массива, например, array($this, 'methodName').

  3. Управление доступом: Убедитесь, что текущий пользователь имеет необходимые права доступа. Функция manage_options в параметрах отвечает за права доступа.

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

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

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