当前浏览:首页 / WordPress函数 / wp_nonce_url()

wp_nonce_url( string $actionurl, int|string $action = -1, string $name = '_wpnonce' )

检索URL,将nonce添加到URL查询

nonce 令牌

urlmore...


参数

$actionurl

(string) (必填) 添加 nonce 动作的URL

$action

(int|string) (可选) nonce 动作名称

默认值: -1

$name

(string) (可选) nonce 名称

默认值: '_wpnonce'


返回

(string) 添加了nonce动作的转义URL。



源码

查看源码 官方文档


更新日志

版本描述
2.0.4开始引入

使用示例

  • 示例1

    注意,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 );
    
  • 示例2

    示例

    插件作者可以使用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”参数用于消除按下哪个按钮的歧义。如果用户可以按多个按钮,请确保每个按钮都有不同的临时名称和/或上下文。