将复选框值插入WordPress数据库

时间:2016-11-02 07:46:01

标签: wordpress

我正在尝试将wordpress数据库中所有勾选复选框的值插入到我自己创建的表中。这是我的jQuery代码:

$(document).ready(function(){
    $('#submit').click(function(){
        var insert = [];
        $('.get_value').each(function(){
            if($(this).is(":checked")  ){
                insert.push($(this).val() );
            }
        });
        insert = insert.toString();
        $.ajax({
            url:"insert.php",
            method:"POST",
            data:{insert:insert},
            success:function(data){
                $('.result').html(data);
            }
        });

    });
});

和我的插入代码,(在insert.php中):

if ( isset($_POST["insert"]) ){
    global $wpdb;
    $table_name = $wpdb->prefix . "status";
    $wpdb->insert($table_name, array(
         'status' => 'approved'
    );
}

它没有显示任何错误,但它没有插入任何错误。我不知道这些信息是否有用,但复选框位于管理员后端,作为自定义帖子类型的一部分。

1 个答案:

答案 0 :(得分:1)

这不起作用,因为你在ajax调用中调用insert.php。该url应指向ajaxurl,该ajaxurl使用您的ajax所在的脚本进行本地化。

因此,如果您的脚本位于名为custom.js的文件中,并且您将其排队,则会将其列入:

wp_enqueue_script( 'my_custom_script', get_template_directory_uri() . '/js/custom.js', array( 'jquery' ),'', true );

然后您将本地化您的ajax网址

wp_localize_script( 'my_custom_script', 'ajax_call', array(
    'ajaxurl'   => admin_url( 'admin-ajax.php' ),
) );

并在您的脚本中使用它,如

$(document).ready(function(){
    $('#submit').click(function(){
        var insert = [];        
        $('.get_value').each(function(){
            if($(this).is(":checked")  ){
                 insert.push($(this).val() );   
            }
        });
        insert = insert.toString();
        $.ajax({
            url: ajax_call.ajaxurl,
            method:"POST",
            data:{
                'action': 'my_action_callback',
                'insert': insert,
            },
            success:function(data){
                $('.result').html(data);
            }
        });
    });
});

此外,您的insert.php代码应位于wp_ajax hooks

上的函数内
add_action( 'wp_ajax_my_action_callback', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action_callback', 'my_action_callback' );

function my_action_callback(){
    if ( isset($_POST["insert"]) ){
        global $wpdb;
        $table_name = $wpdb->prefix . "status";
        $wpdb->insert($table_name, array(
             'status' => 'approved'
        );
    }
}

https://codex.wordpress.org/AJAX_in_Plugins