web-dev-qa-db-fra.com

wp_redirect ne fonctionne pas sur la page du menu administrateur

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?

1
Rich

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();
    }
}
3
gmazzap

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());
}
0
vee