Ошибка WordPress при разработке плагина – «У вас недостаточно прав для доступа к этой странице».

Я только начал изучать разработку плагина 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 – это уникальное имя, и для любого уникального идентификатора он должен содержать пробел, вот в чем проблема 🙂