J'essaie de créer un lien de menu d'administrateur sur le tableau de bord principal, qui amènera les utilisateurs à l'avant de leur site. J'essaie d'utiliser ce code, mais pour une raison quelconque, la redirection ne fonctionne pas.
// Custom Menus
add_action('admin_menu', 'register_web_menu_page');
function register_web_menu_page() {
add_menu_page('View My Website', 'View My Website', 'add_users', 'web_menu_page', 'web_menu_page', '', null, 9);
}
function web_menu_page(){
wp_redirect( home_url() );
exit;
}
L'utilisateur clique sur le lien du menu pour accéder à la page web_menu_ et ne sera pas redirigé vers l'URL de base.
Je ne sais pas pourquoi il ne redirige pas, aucune aide?
Le problème est que la fonction que vous utilisez est exécutée après l’en-tête http, elle ne peut donc pas être redirigée.
Vous devez utiliser un autre moyen.
Une méthode peut être intercepter la variable globale menu
et ajouter un nouvel élément de menu avec toutes les propriétés:
add_action( 'admin_menu', 'register_web_menu_page', 999);
function register_web_menu_page () {
global $menu;
$menu[9] = array (
'View My Website', // menu title
'add_users', // capability
home_url(), // menu item url
null,
'menu-top menu-icon-generic toplevel_page_web_menu_page', // menu item class
'View My Website', // page title
false // menu function
);
}
Ceci n'est pas exactement une manière standard , car vous savez que la méthode standard pour ajouter des éléments de menu consiste à utiliser la fonction add_menu_page
.
Si vous souhaitez utiliser uniquement les pratiques standard, configurez le menu à l'aide de la fonction "ne rien faire", tout comme '__return_false'
, puis utilisez une autre fonction pour rediriger vers la page d'accueil si le $_GET['page']
est = sur votre slug de menu sur admin init (avant que les en-têtes ne soient envoyés). :
add_action('admin_menu', 'register_web_menu_page');
function register_web_menu_page() {
add_menu_page('View My Website', 'View My Website', 'add_users', 'web_menu_page', '__return_false', null, 9);
}
add_action('admin_init', 'redirect_to_site', 1);
function redirect_to_site() {
if ( isset($_GET['page']) && $_GET['page'] == 'web_menu_page' ) {
wp_redirect( home_url() );
exit();
}
}
Vous pouvez utiliser load-(page)
( reference )
De votre code source.
add_action('admin_menu', 'register_web_menu_page');
function register_web_menu_page() {
$hook = add_menu_page('View My Website', 'View My Website', 'add_users', 'web_menu_page', 'web_menu_page', '', null, 9);
add_action('load-' . $hook, 'redirectNiceUrl');
}
function redirectNiceUrl() {
wp_redirect(home_url());
}