【问题标题】:Submitting a form on a custom admin page in wordpress在 wordpress 的自定义管理页面上提交表单
【发布时间】:2014-02-22 19:20:01
【问题描述】:

我在 wordpress 管理员中创建了一个自定义页面,其中有一个简单的文件上传字段和一个提交按钮。我需要弄清楚如何将页面提交到可以处理但在网络上找不到任何东西的地方。有谁知道表单上需要什么“操作”才能使其转到我可以处理文件的功能或其他页面?

【问题讨论】:

  • 如果您将操作留空,它将提交到它所在的页面。
  • 谢谢!不久前我想通了...大声笑..应该关闭帖子。有一个房子的时刻,并意识到我过去是如何做到的。将表单包装在 if(isset($_POST['submit'])) 中,然后调用我的函数。
  • 没问题,很高兴你知道了

标签: php wordpress


【解决方案1】:

使用这个代码sn-p:

add_action( 'admin_action_wpse10500', 'wpse10500_admin_action' );
function wpse10500_admin_action()
{
    // Do your stuff here
    wp_redirect( $_SERVER['HTTP_REFERER'] );
    exit();
}
add_action( 'admin_menu', 'wpse10500_admin_menu' );
function wpse10500_admin_menu()
{
    add_management_page( 'WPSE 10500 Test page', 'WPSE 10500 Test page', 'administrator', 'wpse10500', 'wpse10500_do_page' );
}
function wpse10500_do_page()
{
?>
    <form method="POST" action="<?php echo admin_url( 'admin.php' ); ?>">
        <input type="hidden" name="action" value="wpse10500" />
        <input type="submit" value="Do it!" />
    </form>
<?php
} 

【讨论】:

  • 谢谢!整个上午都在追这个。
  • 我知道这是一条旧评论,但是您如何显示您在操作中所做的任何事情的结果 - wpse10500_admin_action
  • 我会很感激这方面的一些背景信息。当然,您正在向工具添加管理页面链接并使用 wpse10500_do_page() 创建该页面,其中包含一个表单。但是添加的操作“admin_action_wpse10500”值得进一步解释......这真的是“admin_actions_*”,其中* =“隐藏”形式“输入”的“值”吗? ++ 编辑:看起来我是对的。
【解决方案2】:

感谢亨特先生。无法相信您的正确答案。

将表单包装在 if(isset($_POST['submit'])) 中,然后调用我的函数。

【讨论】:

    【解决方案3】:

    我必须更改这样的代码才能工作:

    add_action( 'admin_post_wpse10500', 'wpse10500_admin_action' );
    

    【讨论】:

      【解决方案4】:

      我正在使用与接受的答案不同的方式来回答 OP 问题的这一特定部分以获得结果:

      有谁知道表单上的“操作”需要什么才能使其转到函数...

      发布到同一页面-通过空白表单操作-可以基于相同的单个表单执行不同的操作。

      if ( isset($_POST['custom_action']) ){
          if ( $_POST['custom_action'] == 'update'){
              if ( isset($_POST['Submit']) ) {
                  //form validation and gather into a single object $valid;
                  //I put this in a class, so self::update_main_config($valid);
                  //otherwise you can just update_main_config($valid)
              }
              if ( isset($_POST['Submit_Default']) ) {
                  //no form validation needed & defaults handled via custom wp_option, this could also be static function very easily
                  //secondary action group such as self::restore_config_defaults();
              }
          }
      }
      

      基于我用于我的一个插件的自定义管理页面,我有条件地为我期望发生的事情设置上下文。我的管理配置页面提交新值,它可以恢复默认值......但它也可以根据用户输入影响其他模块。我正在展示如何使用相当简单的条件来创建更复杂的提交上下文。如果上传的是一张照片,并且管理员需要控制发布到任意用户个人资料,但我们想重用相同的代码来允许登录用户发布他们自己的个人资料图片怎么办?这就是为什么上下文,这就是为什么我认为我的方法是相关的。

      我喜欢重用代码并利用单个功能循环来处理任何单个上下文 - 再次,使用单个隐藏表单输入,或可能基于用户或管理员事件的多个控件,可以使用相同的表单和理论上 1 个或多个提交按钮来更改上下文。我实际上想要 2 个按钮来分隔提交者脑海中的动作,所以我展示了该方法。

      这里是对应的HTML

      <form name="config_actions" action="" method="post">
      <input type="hidden" id="custom_action" name="custom_action" value="update" />
      <input type="submit" id="my_main_action" name="Submit" value="Update" />
      <input type="submit" id="my_secondary_action" name="Submit_Default" value="Restore Defaults" />
      </form>
      

      使用简单的 javascript 有条件地将 input#custom_action 设置为适合创建我的上下文的值——为了这个示例,它验证 custom_action 何时设置为“更新”,尽管在我的代码中我使用其他上下文以及基于形成回复。

      我之前的示例获得了 -2(!)我使用 $_POST['action'] 这意味着 input[name="action"] 不要与 form[action=""] 混淆,因为我以前的代码暗示 - 所以是的,那很糟糕。在这里,我更清楚地展示了我有一个名为“custom_action”的隐藏输入上下文管理器,并且我有 2 个名为“Submit”和“Submit_Default”的提交按钮,它们都有效地触发了相同的表单,因为它们都是 type=submit。

      【讨论】:

        猜你喜欢
        • 2016-09-22
        • 1970-01-01
        • 2018-02-18
        • 1970-01-01
        • 1970-01-01
        • 2016-09-25
        • 2014-09-15
        • 1970-01-01
        • 2010-12-23
        相关资源
        最近更新 更多