Ответ 1
Проблема - это четвертый параметр. Я удалил пробелы из четвертого параметра с помощью _ и он работает.
Спасибо за вашу помощь...
Я только начал изучать разработку плагина wordpress и получил эту ошибку, когда я обращаюсь к своему плагиновному меню с admin.
Вот код: importer.php
//*************** Admin function ***************
function oscimp_admin() {
include('importer_admin.php');
}
function oscimp_admin_actions() {
add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerce Product Display", "oscimp_admin");
}
add_action('admin_menu', 'oscimp_admin_actions');
importer_admin.php
<div class="wrap">
<?php echo "<h2>" . __( 'OSCommerce Product Display Options', 'oscimp_trdom' ) . "</h2>"; ?>
<form name="oscimp_form" method="post" action="<?php echo str_replace( '%7E', '~', $_SERVER['REQUEST_URI']); ?>">
<input type="hidden" name="oscimp_hidden" value="Y">
<?php echo "<h4>" . __( 'OSCommerce Database Settings', 'oscimp_trdom' ) . "</h4>"; ?>
<p><?php _e("Database host: " ); ?><input type="text" name="oscimp_dbhost" value="<?php echo $dbhost; ?>" size="20"><?php _e(" ex: localhost" ); ?></p>
<p><?php _e("Database name: " ); ?><input type="text" name="oscimp_dbname" value="<?php echo $dbname; ?>" size="20"><?php _e(" ex: oscommerce_shop" ); ?></p>
<p><?php _e("Database user: " ); ?><input type="text" name="oscimp_dbuser" value="<?php echo $dbuser; ?>" size="20"><?php _e(" ex: root" ); ?></p>
<p><?php _e("Database password: " ); ?><input type="text" name="oscimp_dbpwd" value="<?php echo $dbpwd; ?>" size="20"><?php _e(" ex: secretpassword" ); ?></p>
<hr />
<?php echo "<h4>" . __( 'OSCommerce Store Settings', 'oscimp_trdom' ) . "</h4>"; ?>
<p><?php _e("Store URL: " ); ?><input type="text" name="oscimp_store_url" value="<?php echo $store_url; ?>" size="20"><?php _e(" ex: http://www.yourstore.com/" ); ?></p>
<p><?php _e("Product image folder: " ); ?><input type="text" name="oscimp_prod_img_folder" value="<?php echo $prod_img_folder; ?>" size="20"><?php _e(" ex: http://www.yourstore.com/images/" ); ?></p>
<p class="submit">
<input type="submit" name="Submit" value="<?php _e('Update Options', 'oscimp_trdom' ) ?>" />
</p>
</form>
</div>
Любой может понять, что я делаю неправильно.
Проблема - это четвертый параметр. Я удалил пробелы из четвертого параметра с помощью _ и он работает.
Спасибо за вашу помощь...
В настоящем учебнике можно найти ЗДЕСЬ. И он должен работать с версией Wordpress версии 2.9.2, по крайней мере, это работает для меня. Но, когда я пытаюсь запустить код учебника с версией 3.1, он дает мне ту же ошибку. Но, как упоминает Авинаш, линия
add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerce Product Display", "oscimp_admin");
Следует заменить на
add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerce_Product_Display", "oscimp_admin");
а затем он работает правильно. Надеюсь, это поможет кому-то.
UPDATE
Как справедливо заявил Франсиско Корралес ниже, вы можете рассмотреть возможность деактивировать плагин и активировать его снова, если вы не видите изменений.
Одной из возможных причин этой ошибки является регистрация меню администратора на admin_init
action hook вместо admin_menu
. Здесь дело обстоит не так, но полезно делиться этой информацией, поскольку мне потребовалось несколько часов, чтобы понять это.
Поэтому всегда регистрируйте свои меню следующим образом (и удаляйте пробелы или любые другие алфавитно-цифровые символы из уникального пула - параметр 4 функции add_options_page()
):
Сначала
add_action('admin_menu', 'your_function');
а затем (сначала проверьте, существует ли функция)
if (!function_exists('your_function')) {
function your_function() {
add_options_page(__("Option page name","your-text-domain"), __("Option page name","your-text-domain"), 'manage_options', 'your-page-unique-slug', 'other_function');
}
}
Обратите внимание на использование функции __()
вместо прямого размещения названий - это необходимо для интернационализации вашего плагина (и он отображает цитируемый текст, если нет файлов интернационализации).
В Wordpress 3.6.1 даже не подчеркивается работа. Теперь функция должна быть:
function oscimp_admin_actions() {
add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerceProductDisplay", "oscimp_admin");
}
напишите свой код файла importer_admin.php внутри функции oscimp_admin() или используйте функцию php file_get_contents.
Я просто попытался изменить 4-й параметр в add_options_page с basename (_FILE_); должно быть одинаковым с "importer.php" в вашем случае. Я не знаю точно, к чему это нужно изменить, но он работает!
Удачи!
Да, параметр Forth - это уникальное имя, и для любого уникального идентификатора он должен содержать пробел, что проблема:)