【问题标题】:Wordpress admin-post.php only working if role=admin, but need subscriber role to work tooWordpress admin-post.php 仅在角色 = admin 时有效,但也需要订阅者角色才能工作
【发布时间】:2018-02-14 10:14:48
【问题描述】:

在 Wordpress 网站上,我在我的网站上的表单(下面的代码)中使用 admin-post.php 在提交表单时触发操作,我可以在其中处理 $_POST 项目并设置一些 cookie。如果我将我的帐户角色设置为管理员,这可以正常工作,但如果我只是将角色更改为订阅者则不起作用(我需要我的订阅者能够提交此表单)。作为订阅者角色,而不是运行 admin-post.php,它只是将我重定向到网站主页,即使我仍然登录。所以它的行为就像 admin-post.php 作为订阅者角色不可执行,但我不是确定如何更改...也许我需要在 wp-admin 目录中添加某种 .htaccess 代码?我被难住了……有什么想法吗?

< form method='post' action='/wp-admin/admin-post.php'>

< input type='hidden' name='action' value='run_my_wp_action'   >
//Other form items removed

<input type='submit' name='submit' value='Next' >
</form >

我的 WP 插件中的 PHP

add_action( 'admin_post_nopriv_run_my_wp_action', 'my_wp_action' );     
add_action( 'admin_post_input_run_my_wp_action', 'my_wp_action' );          

function my_wp_action() {   //code  }

【问题讨论】:

  • 我不确定我能否回答您的具体问题,但这似乎不是使用权限的正确方法。您是否考虑过在您的插件中创建一个单独的表单,允许任何用户角色提交它,但没有问题所暗示的潜在漏洞?
  • 我想我可能需要。你知道这是否是预期的操作(订阅者角色无法访问 admin-posts.php?)

标签: php wordpress


【解决方案1】:

尝试使用 wp_ajax。

add_action( 'wp_ajax_my_wp_action', 'my_wp_action' );          
add_action( 'wp_ajax_nopriv_my_wp_action', 'my_wp_action' ); 

function my_wp_action() {   //code  }

【讨论】:

  • 谢谢。像上面那样对 ajax 的钩子进行简单的更改是行不通的。我仍然被重定向到主页,我认为是因为表单仍然引用 admin-post.php。我尝试将表单链接快速更改为 admin-ajax.php 而不是 admin-post.php,但仍然无效。我可以尝试制作 .js 文件,然后进行 Ajax 调用并在其中设置 cookie。如果您有其他想法,真的只是在寻找在表单提交时设置 cookie(作为订阅者角色)的最简单方法。
【解决方案2】:

默认情况下,admin_post_{action_name} 挂钩应该适用于所有登录用户(管理员、编辑、订阅者等)。 在您的情况下,最有可能阻止发布请求的是第三方插件。我的第一个猜测是“用户注册”或“付费会员专业版”或类似的插件,它为某些用户角色(订阅者)提供disable_dashboard_access 选项。如果这没有帮助,请尝试禁用所有插件/将主题切换为默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多