Страница настроек плагина для WP в отдельном файле

djdiplomat
На сайте с 05.08.2009
Offline
136
3337

Вроде бы простая вещь, но нифига не могу найти. Толковых примеров нет.

Если все в одном файле то все понятно и все работает:


add_action('admin_menu', 'myplagin_admin_page'); //Добавить новое меню в админку Wordpress
....
function myplagin_admin_page() {
add_options_page('Настройки плагина', 'Настройки плагина', 8, __FILE__, 'myplagin_options_page');
}
...
function myplagin_options_page() {
//Функция создания и обработки страницы настроек плагина
);

А теперь, допустим, я хочу чтобы myplagin_options_page у меня была не в главном файле плагина, а в отдельном файле.

я делаю так:

add_options_page('Настройки плагина', 'Настройки плагина', 8, 'settings.php', 'myplagin_options_page');

Т.е у меня 2 файла. Основной файл


add_action('admin_menu', 'myplagin_admin_page'); //Добавить новое меню в админку Wordpress
....
function myplagin_admin_page() {
add_options_page('Настройки плагина', 'Настройки плагина', 8, 'settings.php', 'myplagin_options_page');
}

И settings.php в тойже папке, что и myplagin.php


function myplagin_options_page() {
//Функция создания и обработки страницы настроек плагина
);

Но нифига не пашет. Когда перехожу на страницу настроек плагина выдает Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'myplagin_options_page' not found or invalid function

Я по ходу неверно вызываю файл с настройками. Что помимо самой функции myplagin_options_page я должен воткнуть в settings.php?

Во всех примерах что я видел - всегда страница настроек в том же файле. А как в разных замутить?

Спасибо.

Polkan
На сайте с 28.09.2005
Offline
102
#1
djdiplomat:
Вроде бы простая вещь, но нифига не могу найти. Толковых примеров нет.

А с чего вы решили, что 4й аргумент - это ссылка на файл?

Поиск "толковых примеров" начинайте с кодекса: http://codex.wordpress.org/Function_Reference/add_options_page

WordPress-плагин для Apishops (http://p-api-shop.ru/) P-API-Shop WooCommerce-плагин для Apishops (http://woo-apishops.ru/) Woo-Apishops
djdiplomat
На сайте с 05.08.2009
Offline
136
#2

Можете чутка подробнее.

Даже в кодексе четвертый аргумент это файл my-plugin.php)

function my_plugin_menu() {

add_options_page('My Options', 'My Plugin', 'manage_options', 'my-plugin.php', 'my_plugin_page');

}

Можете конкретнее подсказать как сделать?

Polkan
На сайте с 28.09.2005
Offline
102
#3
djdiplomat:
Можете чутка подробнее.
Даже в кодексе четвертый аргумент это файл my-plugin.php)
function my_plugin_menu() {
add_options_page('My Options', 'My Plugin', 'manage_options', 'my-plugin.php', 'my_plugin_page');
}

Какой же это файл?

Четко же написано:

$menu_slug

(string) (required) The slug name to refer to this menu by (should be unique for this menu).
Default: None

my-plugin.php в данном случае - просто уникальный slug

djdiplomat:
Можете конкретнее подсказать как сделать?

Могу: см include() (а также require, include_once, require_once)

djdiplomat
На сайте с 05.08.2009
Offline
136
#4

Вот за require_once спасибо!

Я вообще покопал в интернете, плюс готовые плагины пооткрывал include (не встречал, а require_once много где)

А еще вот какую прикольную штуку нарыл

источник тут http://blogcoding.ru/archives/anatomiya-plagina-wordpress-chast-3/

add_action('admin_menu', array(&$this, 'regAdminPage'));

function regAdminPage() {
$menuPage = add_menu_page(__('Simple View Settings', 'simple-view'), __('Simple View', 'simple-view'), 8, 'simple-view-settings', array(&$this, 'svAdminPage'), WP_PLUGIN_URL.'/simple-view/images/sv-icon.png');
$svSubPage = add_submenu_page('simple-view-settings', __('Simple View Settings', 'simple-view'), __('Settings', 'simple-view'), 8, 'simple-view-settings', array(&$this, 'svAdminPage'));
add_action('admin_print_scripts-'.$svSubPage, array(&$this, 'adminHeaderPluginScripts'));
add_action('admin_print_styles-'.$svSubPage, array(&$this, 'addAdminHeaderPluginStyles'));
$fbUploadPage = add_submenu_page('simple-view-settings', __('FloatBox Uploading and Installation', 'simple-view'), __('FloatBox Installation', 'simple-view'), 8, 'floatbox-install', array(&$this, 'fbInstall'));
$fbSubPage = add_submenu_page('simple-view-settings', __('FloatBox Settings', 'simple-view'), __('FloatBox Settings', 'simple-view'), 8, 'floatbox-settings', array(&$this, 'fbAdminPage'));
add_action('admin_print_scripts-'.$fbSubPage, array(&$this, 'adminHeaderScripts'));
add_action('admin_print_styles-'.$fbSubPage, array(&$this, 'addAdminHeaderCSS'));
$svGalPage = add_submenu_page('simple-view-settings', __('Galleries', 'simple-view'), __('Galleries', 'simple-view'), 8, 'simple-view-galleries', array(&$this, 'svGalleries'));
add_action('admin_print_scripts-'.$svGalPage, array(&$this, 'adminListHeaderScripts'));
add_action('admin_print_styles-'.$svGalPage, array(&$this, 'adminListHeaderStyles'));
$svGalNewPage = add_submenu_page('simple-view-settings', __('Edit Gallery', 'simple-view'), __('New Gallery', 'simple-view'), 8, 'simple-view-edit-gallery', array(&$this, 'GalleryEdit'));
add_action('admin_print_scripts-'.$svGalNewPage, array(&$this, 'adminEditHeaderScripts'));
add_action('admin_print_styles-'.$svGalNewPage, array(&$this, 'adminEditHeaderStyles'));
}

Собственно еще один вопрос:

Есть ли у кого сводная табличка по файлам плагинов, наподобие той, что для шаблонов.

Ну к примеру, если у плагина есть файл uninstall.php, то удаление идет через него. И подключать нет нужды. Просто залили, прописал деинсталятор и все.

Подозреваю, что наверняка еще есть какие-то файлы, которые обрабатываются без подключения.

Или на этом все? uninstall.php единственный?

И еще, если в плагине есть папка includes, она как-нибудь самостоятельно обрабатывается (ее содержание) или входящие в нее файлы ручками нужно подключать? Спасибо.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий