如何处理POST请求

时间:2015-08-12 10:08:16

标签: php wordpress

我来自MVC世界,这对我来说很难掌握。我试图弄清楚处理帖子请求的 wordpress方式是什么。我在网上查了一下,发现我应该使用add_action和我的主题functions.php中定义的函数,但我无法弄清楚如何指定这个函数应该执行的uri。

例如,我有功能a和b,我想在相应的网址blog.com/handle_post?function=ablog.com/handle_post?function=b上执行 - 我看到它的方式我需要在函数内检查{{1} }等于我当前所处的功能但没有任何意义 - 首先开始执行该函数然后退出,如果它不正确 - 那可能不对?

关于URL的$_GET['function']部分,我应该在哪里定义它?

在MVC应用程序中,通常url类似于handle_post,它将调用您在URL中指定的控制器上的方法。这不是wordpress的情况,我试图找出如何在site.com/controller/method/data为帖子请求创建资源,所以我不会找到404。当然我可以在博客的根目录中创建一个文件并指向该文件但是我的脚本中没有wordpress'环境 - 常量,函数等。

1 个答案:

答案 0 :(得分:1)

您可以使用常规init挂钩来捕获您的请求并进行处理。让我们假设您将表单提交到它所在的页面,并使用隐藏的输入来帮助识别要调用的函数:

<form method="post" action="">
  <input type="hidden" name="action" value="process_my_form" />
  <!-- your form inputs here... -->
</form>

然后在 functions.php

function process_my_form() {
    // Check if there is any post data and if it comes from our form
    if(empty($_POST) || !isset($_POST['action']) || $_POST['action'] != 'process_my_form') {
        return;
    }

    // Check if inputs submitted are valid
    if(!isset($_POST['my_field']) || empty($_POST['my_field'])) {
        $_SESSION['my_form_error'] = __('Invalid input');
        return;
    }

    // If all data are valid, process your form, then redirect to whatever with :
    wp_redirect(home_url() . '/my-page-to-redirect/');
}
add_action('init', 'process_my_form');

然后在您的模板中,如果输入无效,您可以检查$_SESSION['my_form_error']以显示错误消息。

请注意,如果您有一天需要在独立脚本中包含wordpress功能,可以在 wp-config.php 中包含WP内核:

require_once(getcwd() . '/wp-config.php');