如何使用ajax从主页wordpress中的数据库中提取数据


How to extract data from database in Home page wordpress with ajax?

我想打电话给/home/***/public_html/subdomains/busuioc/wp-content/themes/scalia/json_gallery_data.php
json_gallery_data.php的内容是:

global $wpdb;
$programs = $wpdb->get_results("SELECT * FROM program_tv");
$tv=array();
foreach ( $programs as $program){
    $tv[]=$program->day;
}
echo json_encode($tv);

AJAX 文件是:

jQuery(document).ready(function(){ 
     loadData();
});
var loadData=function(){
    jQuery.ajax({
        type:"POST",
        url: 'site.com/wp-content/themes/scalia/json_gallery_data.php'
    }).done(function(data){
        var videos=JSON.parse(data);
        for(var i in videos){
           alert(videos[i]);
        }
    });

};

$wpdb不会

定义,因为你绕过了WordPress,你必须使用WordPress的Ajax API才能访问它。

将代码块放在函数中,并将其放在主题的functions.php文件中(如果要将其保存在单独的文件中,请将其包含在functions.php文件中)

function my_ajax_handler(){
    global $wpdb;
    $programs = $wpdb->get_results("SELECT * FROM program_tv");
    $tv=array();
    foreach ( $programs as $program) 
    {
        $tv[]=$program->day;
    }
    echo json_encode($tv);
    wp_die();
}

之后,您必须使用WordPress的Ajax API"注册"它,然后像这样操作。

add_action( 'wp_ajax_call_my_ajax_handler', 'my_ajax_handler' );
add_action( 'wp_ajax_nopriv_call_my_ajax_handler', 'my_ajax_handler' );

WP AJAX (动作)

wp_ajax_nopriv_(动作)

现在,您将在 AJAX 请求中调用的文件是 site.tld/wp-admin/admin-ajax.php 。 你可以对它进行硬编码,但这不是最好的选择。 理想情况下,你应该把它存储在一个JavaScript变量中,WordPress有一个方便的函数来做到这一点。 将以下内容放在用于排队脚本/样式的回调函数中

wp_enqueue_script( 'my-ajax-script', get_stylesheet_directory_uri() . '/path/to/script.js', array('jquery') );
wp_localize_script( 'my-ajax-script', 'my_ajax_object', array( 'ajax_url' => admin_url( 'admin-ajax.php' ) ) );

wp_localize_script

现在你所要做的就是修改你的 Ajax 调用,以包含我们之前注册的 Ajax 触发器,

jQuery.ajax({
    type:"POST",
    url: my_ajax_object.ajax_url,
    data: { 'action': 'call_my_ajax_handler' }
})

请注意call_my_ajax_handler与我们之前"注册"的东西相同。

假设没有任何错误,您应该会看到预期的结果。

  • 所有代码均未经过测试。

也看看插件法典条目中的 AJAX。