【问题标题】:Wordpress process form request from external website by pluginWordpress 通过插件处理来自外部网站的表单请求
【发布时间】:2014-05-15 20:51:48
【问题描述】:

我想创建一个类似于

的端点
http://localhost/wordpress/xxxx/ 

无论何时被调用都在处理 POST 请求。 所以我的情况是这样的:

站点 A Web 表单 -> 用户提交数据 -> Wordpress (http://localhost/wordpress/xxxx/) -> 我正在解析和处理请求

不直接调用插件文件如何实现? 似乎检测“xxxx”是否用作 url 的一部分的最简单方法是使用 parse_request:

add_action('parse_request', 'xxxx_parse_request');
function xxxx_parse_request($wp) {

    if (array_key_exists('xxxx', $wp->query_vars)) {
                        $location =  plugin_dir_url(__FILE__).'includes/issuer_json.php';
                // process the request.
         wp_redirect($location);
    }
}

但它仅适用于 wordpress?xxxx=1 之类的请求,但不适用于 wordpress/xxxx。我认为它对我有用,我创建了一个测试表来检查它。请注意,我将表单的操作指定为 http://localhost/wordpress/?xxxx=1 并指定了隐藏输入来测试传递数据。

<form action="http://wordpress/?xxxx=1"> 
<input type="hidden" name="test" value="tes1"/>

<input type="submit" />
</form>

每当我提交表单时,我都会被重定向到带有如下 URL 的页面:http://wordpress/?test=tes1,因此表单会覆盖默认操作 http://wordpress/?xxxx=1

我不知道如何处理这个问题。任何帮助将不胜感激。

【问题讨论】:

    标签: php wordpress forms


    【解决方案1】:

    在我看来,您需要使用 WP admin-ajax 处理程序。

    基本上在你的插件中你会创建类似的东西:

    add_action( 'wp_ajax_my_plugin_function', 'my_plugin_function' );
    
    function my_plugin_function() {
        // Handle request then generate response using WP_Ajax_Response
        echo "You reached my plugin function";
        // important!
        exit();
    }
    

    然后在您的 ajax 或表单操作中,您使用 POST 参数(或隐藏输入)发布到 http://mydomain.com/wp-admin/admin-ajax.php,该参数称为操作,值为“my_plugin_function”。

    我不经常直接提交表单,但使用 jQuery AJAX 会是这样的:

    $.ajax({
        type: "POST",
        url: "http://mydomain.com/wp-admin/admin-ajax.php",
        data: {'action' : 'my_plugin_function, 'myvar':'another_var'},
        error: function(jqXHR, textStatus, errorThrown){                                        
            console.error("The following error occured: " + textStatus, errorThrown);                                                       
        },
        success: function(data) {                                       
            console.log("Hooray, it worked!");                                                                  
        }
    });
    

    您可以在http://codex.wordpress.org/AJAX_in_Plugins找到更多信息

    【讨论】:

      猜你喜欢
      • 2022-07-30
      • 1970-01-01
      • 2016-11-25
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      • 2021-06-06
      • 2015-03-15
      • 2019-06-13
      相关资源
      最近更新 更多