$wpdb不工作WordPress插件AJAX调用

时间:2020-07-01 作者:user190935

我试图在wordpress插件中设置一个依赖的选取列表。在插件中,我有一个javascript,使用以下方法

             $(\'#am_organisation\').change(function(){
            var val =  $(this).val();
            $.ajax({
                type: \'POST\',
                url:  \'/wp-content/plugins/harriecrm/admin/get-contacts.php\',
                data:\'organisation_id=\'+val,
                success: function(data){
                    $("#am_contact").html(data);
                    //$("#loader").hide();
                },
                error: function(xhr, status, error) {
                    alert(xhr.responseText);
                  }
                });
         });
theget-contacts.php 文件看起来像

    <?php
       global $wpdb;
       global $xx;

       if(isset($_POST[\'organisation_id\'])){

              $id = $_POST[\'organisation_id\'];

              $listitems = $wpdb->prefix . \'am_contacts\';
              $result = $wpdb->get_results ( "SELECT * FROM $listitems" );
              //foreach ( $result as $print ) {
               //      echo  \'<option value="Maak een keuze">Maak een keuzesss-\' . $id  . \'</option>\';

              //}

              //if($wpdb->query($sql)){
              //       $resp->uf_error = $wpdb->print_error();
              //       alert($resp);
              //};
              // $result = $wpdb->get_results ($strsql);
              //foreach ($result as $value) {                       
              // echo \'  <option value=\'.$value->id.\' \'.$selected.\'>\'.$value->am_firstname. ", ".$value->am_firstname. \'</option>    \';
              echo  \'<option value="Maak een keuze">Maak een keuzesss-\' . $id  . \'</option>\';     
              //}
       }
?>
我试了很多。我知道URL很好,并且正在调用该页面。除了回音线,我已经对所有内容进行了注释,我看到pulldoen正在使用回音线进行更新。

但我想使用$wpdb方法从数据库中获取行。但当我取消注释行$result=$wpdb->;get\\u结果(“SELECT*FROM$listitems”);它不再工作了。我收到一条空的错误消息。警报(xhr.responseText);正在调用,但为空。如果我将$wpdb行注释掉,那么is再次起作用。

我真的不知道我错过了什么。除了这里的示例之外,我使用的$wpdb非常多,工作起来很有魅力。

有什么想法吗?BR马泽尔

1 个回复
SO网友:Tom J Nowell

wpdb调用失败的原因是没有wpdb。使用独立PHP文件的方法不正确,因此没有WordPress API。WordPress从不加载。这不是WordPress中AJAX的实现方式。

解决方案是正确执行AJAX调用并注册REST API端点。

E、 g.在插件或主题中functions.php, 注册终结点:

add_action( \'rest_api_init\', function () {
        register_rest_route( \'harriecrm/v1\', \'/contacts/\', array(
                \'methods\' => \'GET\',
                \'callback\' => \'get_contacts\'
        ) );
} );

function get_contacts( $request ) {
    $id = $request[\'organisation_id\'];
    .... your code goes here
    return "result";
}
然后向yoursite.com/wp-json/harriecrm/v1/contacts 并将其从POST 到aGET:

            $.ajax({
                type: \'GET\',
                url:  \'/wp-json/harriecrm/v1/contacts\',
这为您提供了几个优势:

您可以展开register_rest_route 打电话告诉WP需要一个组织ID,它采用什么格式,它将为您进行所有验证和清理POST DELETE 以及您可以选择的其他路线register_rest_route 为您处理身份验证您可以在该系统中使用诸如Postman之类的工具,如果您重做插件,您可以harriecrm/v2 这样一来,旧代码就不会出现问题,还有许多其他优点。使用您直接请求的独立PHP文件是非常糟糕的做法,您的问题突出了一个主要问题。

相关推荐

更改帖子标题悬停时的图像(多个实例)-jQuery

我根据术语创建了一个帖子循环,每个术语都有一个块,如下所示:-术语标题该学期一篇帖子的特色图片该任期的所有职位列表-现在我用了3个术语,所以这个内容有3个区块。其思想是,当您悬停某个术语中某个帖子的标题时,特征图像将更改为悬停帖子中的图像。这是(某种程度上)可行的,但当我悬停在帖子标题上时,所有图像都会发生变化,而不仅仅是它们所属的块中的图像。我认为这是因为我需要在Jquery中使用唯一ID而不是类,但我不知道如何将ID转换为Jquery(我正在学习在构建过程中编写代码)PHP代码//Loop throu