【问题标题】:Wordpress Error while developing a plugin -"You do not have sufficient permissions to access this page."开发插件时出现 Wordpress 错误 -“您没有足够的权限访问此页面。”
【发布时间】:2010-11-19 10:23:00
【问题描述】:

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

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

【问题讨论】:

    标签: php wordpress


    【解决方案1】:

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

    感谢您的帮助...

    【讨论】:

    • 很抱歉我不得不说:谢谢! ;)
    【解决方案2】:

    实际教程可以找到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 在下面的评论中正确指出的那样,如果您没有看到更改,您可以考虑停用插件并再次激活它。

    【讨论】:

    • 糟糕的教程。这种变化对我没有任何影响。
    • 请说的更清楚些,我花了 5 分钟的时间在那些台词上。重要的是要添加您需要停用插件,然后重新激活它。
    • 感谢弗朗西斯科·科拉莱斯。在答案中添加了您的评论。顺便说一句,我可以知道您为此插件使用的 WP 版本吗?
    • 我使用的是 3.8 Wordpress。 +1 因为你听我说。
    【解决方案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');
        }
    }
    

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

    【讨论】:

      【解决方案4】:

      在 Wordpress 3.6.1 上,甚至不再使用下划线。函数现在应该是:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

          我刚刚尝试使用 basename(_FILE_); 更改 add_options_page 中的第四个参数;在您的情况下,应该与“importer.php”的值相同。我不知道它应该改成什么,但它的工作!

          祝你好运!

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-06-05
              • 1970-01-01
              • 1970-01-01
              • 2015-07-18
              • 1970-01-01
              • 2016-02-21
              • 1970-01-01
              相关资源
              最近更新 更多