web-dev-qa-db-fra.com

comment puis-je créer un lien vers une page de sous-menu PlugIn après le traitement d'un formulaire

J'ai un plugin avec 3 submenu_pages. Dans une page se trouve un formulaire (dans un texte et dans une liste d'éléments). lorsque je soumettrai le formulaire, certains traitements seront effectués. après cela, je ne veux plus revenir à la page de formulaire, mais WP Shell me redirige vers l'une des autres pages de sous-menu (dans ce cas une liste).

comment puis-je y arriver?

add_menu_page( 'page1 main page', '0', 'manage_options', 'mg-pi', 'mg_backend');    
add_submenu_page( 'mg-pi', 'list smthing', '0', 'manage_options', 'mg-pi-sub-list', 'mg_list');
add_submenu_page( 'mg-pi', 'create', '0', 'manage_options', 'mg-pi-sub-create', 'mg_new_item');   

donc, dans mg_new_item() est le traitement et il redirige Shell vers mg_list(). mais si je fais l'appel php à mg_list() l'url est toujours celui de mg_new_item().

Je sais que je pourrais faire un header("Location: the-hardcoded-list-url"); mais je cherche la manière habituelle de faire WordPress, avec la génération générique d’URL.

1
helle

Après quelques recherches supplémentaires, je trouve ce que je cherchais. Pas pour une solution de contournement, mais pour une manière compatible wordpress.

Il existe une fonction appelée: menu_page_url qui attend le slug défini. et il y a wp_redirect

nous avons donc 2 fonctions wordpress à appeler. Dans ce cas:

$foo = menu_page_url("mg-pi-sub-list");
wp_redirect($foo);

c'est tout. Et la bonne chose, je respecte toutes les règles de Wordpress et le plugin sera compatible dans les futures versions.

http://codex.wordpress.org/Function_Reference/wp_redirecthttp://codex.wordpress.org/ Function_Reference/menu_page_url

METTRE À JOUR

et si vous avez des problèmes avec vos en-têtes, vous pouvez vous aider avec ce paramètre:

<form action="?page=your-sub_page-slug&noheaders=true">
1
helle

Utilisez simplement add_query_arg(), remove_query_arg() et get_query_var().

Sur votre lien de page, vous utilisez une requête simple, telle que step=one.

$query_arg = add_query_arg( 'step', 'one', $_SERVER['REQUEST_URI'] );

Ensuite, lorsque l'utilisateur a traité le formulaire, il vous suffit de recharger la page. Ensuite, vérifiez simplement si

0 !== get_query_var( 'step' )
AND 'one' !== get_query_var( 'step' )

et processus plus loin. Si vous voulez revenir en arrière, utilisez simplement remove_query_arg(), etc.

1
kaiser