Update $wpdb query with AJAX

时间:2020-03-17 作者:24Prod

我在我的网站上显示一个带有自定义数据库表的列表:

$resultats = $wpdb->get_results(
    $wpdb->prepare( "SELECT photo, nom, prenom, titre_fr, departement_fr FROM {$wpdb->prefix}prfs" )
);

foreach ( $resultats as $resultatPrfs ) {}
现在,我必须使用select输入创建AJAX过滤器。从昨天开始,我一直在尝试许多解决方案,但都不管用。

目前,这里是我的功能。php文件:

function blog_scripts() {
    // Register the script
    wp_register_script( \'custom-script\', get_stylesheet_directory_uri(). \'/js/ajax.js\', array(\'jquery\'), false, true );

    // Localize the script with new data
    $script_data_array = array(
        \'ajaxurl\' => admin_url( \'admin-ajax.php\' ),
        \'security\' => wp_create_nonce( \'load_states\' ),
    );
    wp_localize_script( \'custom-script\', \'blog\', $script_data_array );

    // Enqueued script with localized data.
    wp_enqueue_script( \'custom-script\' );
}
add_action( \'wp_enqueue_scripts\', \'blog_scripts\' );

add_action(\'wp_ajax_get_states_by_ajax\', \'get_states_by_ajax_callback\');
add_action(\'wp_ajax_nopriv_get_states_by_ajax\', \'get_states_by_ajax_callback\');
我的AJAX:

jQuery(function($) {
$(\'#departement_select\').change(function () {
    var departement = $(this).val();
    console.log(departement);
    if(departement != \'\') {
        var data = {
            \'action\': \'get_states_by_ajax\',
            \'departementValue\': departement,
            \'security\': blog.security
        };

        $.post(blog.ajaxurl, data, function(response) {
            $(\'.load-state\').html(response);
            console.log(response);
        });
    }
});
});
和我的页面:

<div class="load-state"></div>

<?php

    function get_states_by_ajax_callback()
    {
        check_ajax_referer(\'load_states\', \'security\');
        $departement = $_POST[\'departementValue\'];
        var_dump($departement);
        global $wpdb;
        $aStates = $wpdb->get_results($wpdb->prepare("SELECT nom FROM " . $wpdb->prefix . "profs WHERE departement_fr = %d", $departement));

        if ($aStates) {
            echo(\'yep\');
        } else {
            echo(\'nope\');
        }
        wp_die();
    }

?>
从昨天开始,我一直在四处转转,甚至在阅读了这个论坛上的许多主题之后,你会有一个解决方案吗?

1 个回复
SO网友:TheDeadMedic

您需要AJAX钩子在启动时可以访问的函数,因此移动get_states_by_ajax_callback 功能到您的functions.php

相关推荐

需要php代码的输出才能在Divi模块下显示

我有一个创建表的页面的php函数代码。为了让表格显示在前端,我使用了一个页面模板(请参见代码)来创建页面(在页面属性中),而不是使用默认模板。现在,我想在用户看到的表的顶部添加一个Divi文本模块。我已经有了一个“Hello World”原型,但正在努力将其纳入我的表格页面。有什么想法吗?代码段:/** * Template Name: MyTable * * @package WordPress * @subpackage TNG */ <