Я только начал изучать разработку плагина 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”);
и затем он работает правильно. Надеюсь, это поможет кому-то.
ОБНОВЛЕНИЕ :
Как справедливо заявил Франсиско Корралес ниже, вы можете рассмотреть возможность деактивировать плагин и активировать его снова, если вы не видите изменений.
Одна из возможных причин этой ошибки заключается в том, что на самом деле регистрируется меню администратора в 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 – это уникальное имя, и для любого уникального идентификатора он должен содержать пробел, вот в чем проблема 🙂