参数
- $actionurl
-
(string) (必填) 添加 nonce 动作的URL
- $action
-
(int|string) (可选) nonce 动作名称
默认值: -1
- $name
-
(string) (可选) nonce 名称
默认值: '_wpnonce'
返回
(string) 添加了nonce动作的转义URL。
源码
更新日志
版本 | 描述 |
---|---|
2.0.4 | 开始引入 |
使用示例
注意,
wp_nonce_url
将&
转义为&
,并可能导致链接或重定向变得不正确。// Sample URL, note the & in there $url = 'http://localhost/?arg1=value1&arg2=value2'; // This will show http://localhost/?arg1=value1&arg2=value2&_wpnonce=abcdef echo wp_nonce_url( $url, 'action' ); // This will return http://localhost/?arg1=value1&arg2=value2&_wpnonce=abcdef echo add_query_arg( '_wpnonce', wp_create_nonce( 'action' ), $url );
示例
插件作者可以使用wp_nonce_url()和admin_url()的组合安全地添加执行任务的链接
例如,从创建链接开始,用户可以单击以执行有趣的操作:function my_plugin_do_something () { ?> <h2><?php esc_html_e('My Plugin Admin Screen', 'my-plugin-textdomain');?></h2> <p> <a href="<?php print wp_nonce_url(admin_url('options.php?page=my_plugin_settings'), 'doing_something', 'my_nonce');?>" class="button button-primary"><?php esc_html_e('Do Something!', 'my-plugin-textdomain');?></a> <span class="description"><?php esc_html_e('This button does something interesting.', 'my-plugin-textdomain');?></span> </p> <?php }
然后,要检测用户单击链接的时间,请在调用add_menu_page()或其管理菜单包装器之一时定义的函数中使用wp_verify_nonce()检查nonce有效性。如果nonce无效,则未单击该链接,因此显示该链接。否则,做“有趣的事”
add_action('admin_menu', 'add_my_plugin_admin_screen'); function add_my_plugin_admin_screen () { add_options_page( __('My Plugin Settings', 'my-plugin-textdomain'), __('My Plugin', 'my-plugin-textdomain'), 'manage_options', 'my_plugin_settings', 'my_plugin_do_something' ); } function my_plugin_do_something () { if (!isset($_GET['my_nonce']) || !wp_verify_nonce($_GET['my_nonce'], 'doing_something')) { ?> <h2><?php esc_html_e('My Plugin Admin Screen', 'my-plugin-textdomain');?></h2> <p> <a href="<?php print wp_nonce_url(admin_url('options.php?page=my_plugin_settings'), 'doing_something', 'my_nonce');?>" class="button button-primary"><?php esc_html_e('Do Something!', 'my-plugin-textdomain');?></a> <span class="description"><?php esc_html_e('This button does something interesting.', 'my-plugin-textdomain');?></span> </p> <?php } else { // User pressed "Do Something!" button, so // do something interesting. } }
注意,建议的nonce的“context”参数用于消除按下哪个按钮的歧义。如果用户可以按多个按钮,请确保每个按钮都有不同的临时名称和/或上下文。