WordPress插件开发错误 -“您没有足够的权限访问此页面。”

14

我刚开始学习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');

导入管理者(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

问题出在第四个参数上。

我将第四个参数中的空格替换为下划线,这样就可以正常工作了。

谢谢你的帮助...


很抱歉我得说:谢谢你!;) - swdev

6
实际教程可以在这里找到。它应该适用于WordPress 2.9.2版本,至少对我而言是有效的。但是,当我尝试使用3.1版本运行教程代码时,会出现相同的错误。但是,如Avinash所提到的那样,这个问题可能是由于代码中的一行

标签引起的。
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”);

然后它就可以正常工作了。希望能帮到一些人。

更新:

如下方评论中Francisco Corrales所说,如果您没有看到更改,请考虑停用插件并重新激活。


糟糕的教程。这个更改对我没有任何影响。 - JohnnyBizzle
1
请让它更清晰一些,我花了5分钟盯着那些行。重要的是要添加需要停用插件,然后再重新激活它的说明。 - Francisco Corrales Morales
感谢Francisco Corrales。我已将您的评论添加到答案中。顺便问一下,您使用的是哪个WP版本来运行此插件? - enam
我之前使用的是3.8版本的WordPress。+1 是因为你听了我的建议。 - Francisco Corrales Morales

3
这个错误可能的一个原因是在admin_init动作挂钩上注册管理员菜单,而不是admin_menu。虽然这不是这里的情况,但分享这个信息很好,因为我花了几个小时才找出来。
所以,始终像这样注册您的菜单(并从函数add_options_page()的唯一标识符中删除空格或任何其他非字母数字字符 - 第4个参数):

最初

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
在WordPress 3.6.1中,甚至下划线都不再起作用。该函数现在应该是:
function oscimp_admin_actions() {
    add_options_page("OSCommerce Product Display", "OSCommerce Product Display", 1, "OSCommerceProductDisplay", "oscimp_admin");
}

0

将您的importer_admin.php文件代码编写在oscimp_admin()函数内,或使用php file_get_contents函数。


0

我刚刚尝试修改了add_options_page中的第四个参数,使用basename(_FILE_);在你的情况下应该与"importer.php"相同。我不知道它应该改成什么,但这确实有效!

祝好运!


0

是的,第四个参数是唯一名称,对于任何唯一标识符,它应该包含空格,这就是问题所在 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接