在我的WordPress插件的管理页面中,我有一个函数可以对PHP文件进行ajax调用。如果一切顺利,这个PHP文件应该更新WordPress中的选项。但由于某些原因,当我尝试使用update_option时,它不起作用。
这是我的activate.php:
if(isset($_GET['activate']) && $_GET['activate'] == "true") {
if(isset($_REQUEST['txtAC']) && isset($_REQUEST['txtKey'])) {
$ac = $_REQUEST['txtAC'];
$key = $_REQUEST['txtKey'];
if($ac != "" && $key != "") {
$api_url = "http://192.168.2.75/wouter/yii2/basic/web/cars/activate/" . $ac . "/" . $key;
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $api_url);
$result = curl_exec($ch);
curl_close($ch);
$count = json_decode($result);
if($count == 1){
update_option("ac", $ac);
update_option("auth_key", $key);
echo "success";
} else {
echo "failed";
}
return;
} else {
echo "notSet";
return;
}
}
return;
}
所以一切顺利,直到update_option。当我把它们放进去时,没有任何事情发生,并且出现了服务器错误。
我做错了什么?
修改
所以这是我的jquery ajax代码:
function activatePlugin() {
jQuery("#acError").html("");
jQuery("#keyError").html("");
var txtAC = document.getElementById("txtAC").value;
var txtKey = document.getElementById("txtKey").value;
if(txtAC == "") {
jQuery("#acError").html("Vul een klantnummer in");
}
if(txtKey == "") {
jQuery("#keyError").html("Vul een key in");
}
if(txtAC != "" && txtKey != "") {
jQuery.ajax({
url: "../wp-content/plugins/autocommerce/admin/activatePlugin.php?activate=true",
method: "POST",
data: { txtAC : txtAC, txtKey: txtKey }
}).done(function(msg) {
alert(msg);
if(msg == "success") {
location.reload();
} else if(msg == "failed") {
jQuery("#activateError").html("Gegevens onjuist. Controleer uw gegevens en probeer het opnieuw.");
} else if(msg == "notSet") {
jQuery("#activateError").html("Een of meerdere velden zijn onjuist ingevuld.");
} else {
alert(msg);
jQuery("#activateError").html("Er is een fout opgetreden. Probeer het later opnieuw.");
}
});
}
答案 0 :(得分:2)
正如评论中所指出的,您的文件在wordpress环境之外,因此它无法识别update_option
函数。即使知道评论中提到了ajax api,我也会把你应该做的事情放在这里:
如果您尚未执行此操作,则需要主插件文件中的activate.php
文件。像require_once('admin/activate.php');
这样简单的事情就应该这样做。
使用wp_ajax
挂钩将动作挂钩到wordpress ajax。您可以将此代码放在主插件文件或activate.php中(因为前者需要它)。
add_action( 'wp_ajax_my_plugin_activate', 'my_plugin_activate' );
add_action( 'wp_ajax_nopriv_my_plugin_activate', 'my_plugin_activate' );
使用上面指定的函数包围您的activate.php代码,如下所示:
function my_plugin_activate() {
if(isset($_REQUEST['txtAC']) && isset($_REQUEST['txtKey'])) {
$ac = $_REQUEST['txtAC'];
$key = $_REQUEST['txtKey'];
// the code...
}
wp_die();
}
请注意,您不必再对$_GET['activate']
进行测试。
将ajax帖子的网址更改为wp-admin/admin-ajax.php
,并将操作作为数据属性传递。这应该在本地化您的脚本(如文档中所示)。为简化起见,我直接将其放在这里:
jQuery.ajax({
url: "../wp-admin/admin-ajax.php", // you should use wp_localize_script in your PHP code and the defined variable here
method: "POST",
data: { action: 'my_plugin_activate', txtAC : txtAC, txtKey: txtKey }
})
请原谅我的英语,这不是我的母语。希望能帮助到你!