Ошибка Wordpress при разработке плагина - «У вас недостаточно прав для доступа к этой странице». - PullRequest
13 голосов
/ 19 ноября 2010

Я только начал изучать разработку плагинов для WordPress и получил эту ошибку при доступе к меню моего плагина от администратора.

Вот код: 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>

Любой может понять, что я делаю неправильно.

Ответы [ 7 ]

16 голосов
/ 22 ноября 2010

Проблема в четвертом параметре.Я удалил пробелы из четвертого параметра с помощью _, и он работает.

Спасибо за вашу помощь ...

6 голосов
/ 27 марта 2011

Сам учебник можно найти ЗДЕСЬ . И он должен работать с версией 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

Как справедливо заявлено Франциско Корралесом в комментариях ниже, вы можете рассмотреть возможность деактивировать плагин и активировать его снова, если вы не видите изменений.

3 голосов
/ 12 февраля 2014

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

Поэтому всегда регистрируйте свои меню как это (и удаляйте пробелы или любые другие не алфавитно-цифровые символы изуникальный слаг - параметр 4th функции 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');
    }
}

Обратите внимание на использование функции __() вместо непосредственного размещения заголовков - это необходимо для интернационализации вашего плагина (и он отображает цитируемый текст, если нет файлов интернационализации).

1 голос
/ 13 сентября 2013

В Wordpress 3.6.1 даже подчеркивание не работает.Теперь функция должна быть:

function oscimp_admin_actions() {
    add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerceProductDisplay", "oscimp_admin");
}
0 голосов
/ 12 ноября 2011

Да, параметр Forth является уникальным именем, и для любого уникального идентификатора он должен содержать пробел, вот в чем проблема:)

0 голосов
/ 20 ноября 2010

Я только что попытался изменить 4-й параметр в add_options_page с базовым именем (_ FILE _);должно быть то же значение с "importer.php" в вашем случае.Я не знаю точно, на что это нужно изменить, но это работает!

Удачи!

0 голосов
/ 19 ноября 2010

напишите свой код файла importer_admin.php внутри функции oscimp_admin () или используйте функцию php file_get_contents.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...