admin管理员组

文章数量:1304690


I'm coding a plugin that will be fetching data from the database and display it into a table.
I want to get a page with a select tag that will always be on the plugin's main page, select something and get it into the main page. So basically changing pages via the select tag without reloading the page.
The problem is, it seems that when the page is called via the ajax method, the object method (that worked when displaying it directly in the main page) doesn't work anymore.
I don't know if it's possible to make it work at all, if it's not, please tell me.

Plugin main page:
<?php
/*
Plugin Name: MRL validation
Description: Vérification et acceptation des adhérents.
Author: Ben
Version: 1.0
*/

if (!class_exists('MRL_validation')) {
    class MRL_validation
    {
        function __construct()
        {
            include_once plugin_dir_path(__FILE__) . '/MRL_validation_plugin.php';
            $inst_plugin = new MRL_validation_plugin();
            if (isset($inst_plugin)) {
                add_action("admin_menu", array($inst_plugin, 'mrl_plugin_menu'));
            }

            if (isset($_POST['action'])) {
                add_action(
                    'wp_ajax_mrl_validation_admin',
                    array($inst_plugin, 'mrl_validation_admin_ajax')
                );
            }
        }
    }
}

if (class_exists('MRL_validation')) {
    $mrl_val = new MRL_validation();
}

Plugin back end page:

<?php

class MRL_validation_plugin
{
    function mrl_plugin_menu()
    {
        $pagePlugin = add_menu_page('MRL Validation', 'MRL Validation', 'administrator', 'MRL_Validation.php', array($this, 'mrl_validation_admin'), 'dashicons-valid');
        add_action('admin_head-' . $pagePlugin, array($this, 'mrl_validation_admin_head'));
    }

    public static function getauditeurslist() //this method is called
    {
        global $wpdb;
        $sql = "SELECT a.idAuditeur,a.Nom,a.Pays,a.Depuis,a.Ville,a.Age,a.Portrait,a.Email,a.Presentation,a.DecouverteMrl,a.RejoindreCaa,a.ApporterCaa,a.RoleCaa,a.Commentaire,a.idStatut,a.ValidationInscription,ca.type FROM Auditeurs AS a LEFT JOIN CAAStatuts AS ca ON a.idStatut = ca.idStatut WHERE a.ValidationInscription = 0 ORDER BY idAuditeur";
        $auditeurslist = $wpdb->get_results($sql);
        return $auditeurslist;
    }

    function editAuditeur($champ, $value, $id) 
    {
        global $wpdb;
        $sql = $wpdb->prepare(
            "UPDATE Auditeurs SET " . $champ . "='" . $value . "' WHERE idAuditeur =" . $id
        );
        $req = $wpdb->query($sql);
        return $req;
    }

    function mrl_validation_admin_head()
    {
        wp_register_style('mrl_validation_admin_css', plugins_url('css/mrl-validation-admin.css', __FILE__));
        wp_enqueue_style('mrl_validation_admin_css');
        wp_enqueue_style('font-awesome-5', '.15.2/css/all.min.css', array(), null);
        wp_enqueue_script('mrl-validation-js', plugins_url('js/mrl-validation-js.js', __FILE__), array('jquery'));
        wp_localize_script('mrl-validation-js', 'mrlvalidationadmin', array(
            'ajaxurl' => admin_url('admin-ajax.php'),
            'action' => 'mrl_validation_admin',
            'nonce' => wp_create_nonce('mrl_validation_admin')
        ));
    }

    function mrl_validation_admin_ajax()
    {
        check_ajax_referer('mrl_validation_admin', 'nonce');
        $update = $this->editAuditeur($_POST['field'], $_POST['value'], $_POST['id']);
        exit();
    }

    function mrl_validation_admin()
    {
        require_once('template-admin.php');
    }
}

ajax call:

jQuery(document).ready(function ($) {
    $("#status").change(function () {
        var val= $("#status").val();
        $("#content").load("/wp-content/plugins/MRL-validation/" + val, function(response, status, xhr) {
            if (status == "error") {
                console.log(msg + xhr.status + " " + xhr.statusText);
            } else {
                console.log(msg + xhr.status + " " + xhr.statusText);
            }
          });
        
    });
});

本文标签: phpWordpress ajax doesn39t display object method on jQuery change() function