我刚开始学习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>
任何人都可以弄清楚我做错了什么。
答案 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参数是唯一名称,对于任何唯一标识符,它应该包含空格,这就是问题:)