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

时间:2010-11-19 10:23:00

标签: php 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>

任何人都可以弄清楚我做错了什么。

7 个答案:

答案 0 :(得分:16)

问题是第四个参数。 我用_删除了第四个参数中的空格,它可以工作。

感谢您的帮助......

答案 1 :(得分:6)

实际教程可以找到HERE。它应该适用于2.9.2版本的Wordpress,至少它适用于我。但是,当我尝试使用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 在下面的评论中正确指出的那样,您可以考虑停用插件&amp;如果您没有看到更改,请再次激活它。

答案 2 :(得分:3)

此错误的一个可能原因实际上是在admin_init操作挂钩上注册管理员菜单,而不是admin_menu。这不是这种情况,但分享这些信息是很好的,因为我需要花费数小时来解决这个问题。

所以总是像这样注册你的菜单(并从独特的slug中删除空格或任何其他非字母数字字符 - 函数add_options_page() 4th 参数):

首先

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');
    }
}

请注意使用__()函数而不是直接放置标题 - 这对于插件的国际化是必要的(如果没有国际化文件,它会显示引用的文本)。

答案 3 :(得分:1)

在Wordpress 3.6.1上甚至不再强调工作了。该功能现在应该是:

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

答案 4 :(得分:0)

在oscimp_admin()函数中编写importer_admin.php文件代码或使用php file_get_contents函数。

答案 5 :(得分:0)

我只是尝试使用basename(_ FILE _)更改add_options_page中的第4个参数;在您的情况下,与“importer.php”应该是相同的值。我不确切知道应该改变什么,但是它有效!

祝你好运!

答案 6 :(得分:0)

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