我想创建一个类似于
的端点http://localhost/wordpress/xxxx/
每当被调用时都在处理POST请求。 所以我的情况看起来像:
网站A网络表单 - >用户提交数据 - >
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>
每当我提交表单时,我都会被重定向到包含以下网址的页面:http://wordpress/?test=tes1
,因此表单覆盖了默认操作 http://wordpress/?xxxx=1
我不知道如何处理这个问题。任何帮助将不胜感激。
答案 0 :(得分: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参数(或隐藏的输入)POST到http://mydomain.com/wp-admin/admin-ajax.php,该参数称为具有值&#39; my_plugin_function&#39;的操作。
我不经常直接提交表单但是使用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!");
}
});
中找到更多信息