我创建了这个自定义插件,激活后它会在已安装的插件上显示“设置”。
我不想在管理面板菜单中的任何位置显示我的设置页面LINK,但是当用户点击插件的设置时(请参阅上面的屏幕截图)应该转到插件设置页。我知道我必须在我的第二个函数“our_plugin_action_links”的变量$settings_link
我只是尝试链接放在admin文件夹中的单个php文件。然后它点击时转到那个php文件。但是我想在管理面板中显示插件设置页面,就像其他页面一样,例如 添加帖子或**常规设置页面,当点击设置插件时,但未在管理员菜单中显示插件设置的链接或菜单。
我该怎么做?
我的插件代码
<?php
/*
Plugin Name: admin menu remover
Description: Remove the admin menus just by a single plugin installation
Version: 1.0
Author: Author
Author URI: http://URI_Of_The_Plugin_Author
License: A "Slug" license name e.g. GPL2
*/
/* This function and action removes following menu item from the admin panel */
add_action( 'admin_menu', 'remove_links_menu' );
function remove_links_menu() {
remove_menu_page('index.php'); // Dashboard
//remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('themes.php'); // Appearance
//remove_menu_page('plugins.php'); // Plugins
//remove_menu_page('tools.php'); // Tools
//remove_menu_page('options-general.php'); // Settings
//remove_menu_page('users.php'); // Users
}
/* This function and filter append "setting" immediately after the "admin menu remover" plugin activation */
add_filter('plugin_action_links', 'our_plugin_action_links', 10, 2);
function our_plugin_action_links($links, $file) {
static $this_plugin;
if (!$this_plugin) {
$this_plugin = plugin_basename(__FILE__);
}
// check to make sure we are on the correct plugin
if ($file == $this_plugin) {
// the anchor tag and href to the URL we want. For a "Settings" link, this needs to be the url of your settings page
$settings_link = '<a href="' . get_bloginfo('wpurl') . '/wp-admin/admin.php?page=font-uploader.php">Settings</a>';
// add the link to the list
array_unshift($links, $settings_link);
}
return $links;
}
?>
答案 0 :(得分:2)
您可以在此网站上试用生成器。
http://wpsettingsapi.jeroensormani.com/
它的作用是在您设置选项时进行回调功能。所以不是一个单独的文件,而只是你的functions.php或插件文件。
答案 1 :(得分:2)
首先,从用户的角度来看,我不建议这样做。如果您的插件需要设置页面,请将其放在下面的设置中。如果您不信任您的用户,则不要允许设置或使用功能将菜单限制为仅限某些用户。
但是,如果您对此有特定需求,那么最简单的方法是使用add_options_page
注册一个普通的选项页面,然后手动将菜单从全局数组中删除。此方法可确保正确计算权限并且非常安全。
此外,您可以通过plugin_action_links
代替'plugin_action_links_' . plugin_basename( __FILE__ )
而不是//We'll key on the slug for the settings page so set it here so it can be used in various places
define( 'MY_PLUGIN_SLUG', 'my-plugin-slug' );
//Register a callback for our specific plugin's actions
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'my_plugin_action_links' );
function my_plugin_action_links( $links )
{
$links[] = '<a href="'. menu_page_url( MY_PLUGIN_SLUG, false ) .'">Settings</a>';
return $links;
}
//Create a normal admin menu
add_action( 'admin_menu', 'register_settings' );
function register_settings()
{
add_options_page( 'My Plugin Settings', 'My Plugin Settings', 'manage_options', MY_PLUGIN_SLUG, 'my_plugin_settings_page' );
//We just want to URL to be valid so now we're going to remove the item from the menu
//The code below walks the global menu and removes our specific item by its slug
global $submenu;
if( array_key_exists( 'options-general.php' , $submenu ) )
{
foreach( $submenu['options-general.php'] as $k => $v )
{
if( MY_PLUGIN_SLUG === $v[2] )
{
unset( $submenu['options-general.php'][$k] );
}
}
}
}
//This is our plugins settings page
function my_plugin_settings_page()
{
echo 'Hello from my plugin!';
}
,而下面的代码就是这样做的。您需要将常量更改为更具体的代码(或切换到全局变量或只使用字符串)。有关详细信息,请参阅代码注释。
{{1}}