update_option不能在单个php文件中工作

时间:2016-03-02 13:12:33

标签: php wordpress

在我的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.");
            }
        });
    }

1 个答案:

答案 0 :(得分:2)

正如评论中所指出的,您的文件在wordpress环境之外,因此它无法识别update_option函数。即使知道评论中提到了ajax api,我也会把你应该做的事情放在这里:

  1. 如果您尚未执行此操作,则需要主插件文件中的activate.php文件。像require_once('admin/activate.php');这样简单的事情就应该这样做。

  2. 使用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' );
    
  3. 使用上面指定的函数包围您的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']进行测试。

  4. 将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 }
    })
    
  5. 请原谅我的英语,这不是我的母语。希望能帮助到你!