无法让 wordPress 的 admin-post.php 工作

0 wordpress wordpress-admin

我已经查看了几个关于此的在线文档,并查看了此站点上的帖子,但似乎仍然无法让我的管理员帖子请求起作用。在我的管理菜单构造函数中,我添加了以下操作:

add_action('admin_post_modify_release_request', 'handle_release_posting');

具有以下处理程序功能:

function handle_release_posting(){
    print_r($_POST);
    echo "<br/>incoming:" . var_export($_POST, TRUE) . "<br/>";
    ?> <div class="wrap">
        <?php screen_icon(); ?>
            <div class="release_response">Posting response goes here.</div> 
       </div>
        <?php 
}?
Run Code Online (Sandbox Code Playgroud)

我的 html 表单元素是这样的:“method="post">?

与其他输入加...

 <input type="hidden" id='action' name="action" value="modify_release_request">
      <input type="submit" value="Modify Release"></div>
     </form>
Run Code Online (Sandbox Code Playgroud)

? 提交请求的行为是调用http://joomla.tenasys.lan/wp-admin/admin-post.php

一个完全空白的页面:

<html><head></head><body></body></html>
?
Run Code Online (Sandbox Code Playgroud)

我错过了什么?我究竟做错了什么?

小智 5

不知何故,我没有设法使用隐藏输入来传递动作参数,如下所示:

另一种解决方案是在 URL 中添加 action 参数,如下所示:

<!-- language: lang-html -->
    <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>?action=add_foobar" method="post">
Run Code Online (Sandbox Code Playgroud)

这是整个解决方案:

<!-- language: lang-php -->
function sandbox_show_plugin(){
    global $post;
    ?>
    <form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>?action=add_foobar" method="post">
      <input name="name" type="text" placeholder="Enter email">
      <button type="submit" class="btn btn-primary">Submit</button>
    </form>
    <?php

}

//Hooks
add_shortcode( 'sandbox_plugin_shortcode', 'sandbox_show_plugin' );


function prefix_admin_add_foobar(){ 
    status_header(200);
    var_dump($_POST);
    // wp_redirect( 'http://any.url/',302 ); 
    die("Server received '{$_POST['name']}' from your browser.");

}

add_action( 'admin_post_add_foobar', 'prefix_admin_add_foobar' );
add_action( 'admin_post_nopriv_add_foobar', 'prefix_admin_add_foobar' ); // this is for non logged users
Run Code Online (Sandbox Code Playgroud)