管理员:自定义查询返回权限错误

时间:2012-02-07 作者:cqde

我们当前的WordPress安装有几个自定义表,我们已经将这些表放在包含misc的WP数据库中。信息我们已经为WP admin面板创建了自定义选项页,以便我们的WP admin用户能够通过admin访问DB中的信息。

我们想要的一个选项是,用户可以通过WP管理面板删除其中一些记录,因此我最初设置了一个自定义查询,只需更新或删除表中的记录。但是,当我尝试提交查询时,WP返回错误:“您没有足够的权限访问此页面。”。

我是否应该避免MySQL查询“UPDATE table\\u name…etc.”?

2 个回复
SO网友:Stephen Harris

我认为问题在于?deleteUser=XX 您获得了“非法”url,例如:

http://localhost/wordpress/wp-admin/edit.php?post_type=type&page=mypage?deleteUser=xxx
相反,请使用WordPress\'add_query_arg:

    $url = $_SERVER[\'REQUEST_URI\'];
    $url = add_query_arg(\'test\',\'val\',$url);
其中给出:

http://localhost/wordpress/wp-admin/edit.php?post_type=type&page=mypage&deleteUser=xxx
就我个人而言,我不会使用$_SERVER[\'REQUEST_URI\']; 而是使用admin_url. 此外,请参阅@Joshua comments on using the WordPress in-build Function,该函数处理SQL语句的清理。

最后,您需要执行nonce检查(以及权限检查-当前用户是否能够删除/修改表?)。对于临时检查,您可以执行以下操作:

 $url = wp_nonce_url( $url, \'my-nonce-action\' );
将nonce添加到指向用户的url。然后,在删除/修改任何内容之前,请使用wp_verify_nonce 验证nonce。

SO网友:Joshua

不确定许可,没有更多信息,但您可能希望尝试以下操作:http://codex.wordpress.org/Class_Reference/wpdb#UPDATE_rows

基本上,其用途总结如下:

<?php
    global $wpdb;
        $update_array = array(
            \'column1\' => \'value 1\',
            \'column2\' => $value_2
        );

        $where_array = array(
            \'column 3\' => \'value 3\'
        );

    $wpdb->update(\'table_name\', $update_array, $where_array);
?>
关于许可的快速想法,您是否将“更新”页面设置为私有和/或隐藏?

结束