Подтвердить что ты не робот

Ошибка 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>

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Одной из возможных причин этой ошибки является регистрация меню администратора на 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');
    }
}

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

Ответ 4

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

function oscimp_admin_actions() {
    add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerceProductDisplay", "oscimp_admin");
}

Ответ 5

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

Ответ 6

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

Удачи!

Ответ 7

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