Datatable не загружается при использовании load () и обновляет содержимое datatable в div - PullRequest
0 голосов
/ 09 июля 2020

Я создал своего рода информационную панель, которая загружает контент с другой страницы по щелчку с определенным c идентификатором div, это отлично работает и загружает необходимый div с другой страницы. Проблема в том, что он не работает на странице, где я добавил шорткод Datatable [subscriber_datatables]. при первом щелчке по ссылке .sidebarlink таблица отображается, но пуста, второй щелчок показывает, что контент есть, он загружается, а затем скрывается.

Видео проблемы: https://gofile.io/d/Rh0A2K

единственный способ, которым это работает с таблицей, если я изменю это:

$('#bla-load-content').load(this.href + " #bla-content-area");

на это

$('#bla-load-content').load(this.href);

, но затем он загружает всю страницу со всеми частями, такими как боковая панель и другие ненужные div. Я не уверен, что то, что я пытаюсь достичь, слишком сложно или что-то не так с кодом.

кстати, datatable будет отображаться, как ожидалось, если я сделаю обновление страницы руководства sh

по триггеру клика


    // Load content with specific div ID
    $('.site-main').on("click",".sidebarlink",function(e){ 
        e.preventDefault(); // cancel click
        
        // on click Load div with id #bla-content-area from another page
        $('#bla-overlay').fadeIn().delay(800).fadeOut();
        $('#bla-menu-title').load(this.href + " #bla-title");
        $('#bla-load-content').load(this.href + " #bla-content-area");


        // tested to reload the table but not working
        //$("#subscribertable").DataTable().ajax.reload();
 
        // tested this as well it's no reloading
        //var table = $('#subscribertable').DataTable();
        //table.ajax_url.reload();

        // this is showing the table but hiding it later
        $('#subscribertable').DataTable({
        "retrieve": true,
        "processing": true,
        "serverSide": true,
        "ajax": ajax_url
        });

    
    });

шорткод и код функции, которые я использую

<?php
/**
 * lubuvna Custom Plugin Options and Fields
 *
 * @link https://developer.wordpress.org/themes/basics/template-hierarchy/
 *
 * @package lubuvna
 */


// Add Post title to custom meta 
add_action( 'transition_post_status', 'duplicate_title_subscriber', 10, 3 ); 
 
function duplicate_title_subscriber( $new, $old, $post ) { 
    if ( $post->post_type == 'lubuvna_subscriber' ) { 
        update_post_meta( $post->ID, 'd_title', $post->post_title ); 
    } 
}



// Add DataTables Resources
  
function add_datatables_scripts_subscriber() {
wp_register_script('datatables', 'https://cdn.datatables.net/1.10.20/js/jquery.dataTables.min.js', array('jquery'), true);
wp_enqueue_script('datatables');
  
wp_register_script('datatables_bootstrap', 'https://cdn.datatables.net/1.10.20/js/dataTables.bootstrap4.min.js', array('jquery'), true);
wp_enqueue_script('datatables_bootstrap');
    
wp_register_script('datatables_responsive', 'https://cdn.datatables.net/responsive/2.2.3/js/dataTables.responsive.min.js', array('jquery'), true);
wp_enqueue_script('datatables_responsive');

wp_register_script('datatables_responsive_bootstrap', 'https://cdn.datatables.net/responsive/2.2.3/js/responsive.bootstrap4.min.js', array('jquery'), true);
wp_enqueue_script('datatables_responsive_bootstrap');
}
  
function add_datatables_style_subscriber() {
wp_register_style('lubuvna-datatable-bootstrap_style', 'https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css');
wp_enqueue_style('lubuvna-datatable-bootstrap_style');

wp_register_style('lubuvna-datatables_bootstrap_style', 'https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css');
wp_enqueue_style('lubuvna-datatables_bootstrap_style');
    
wp_register_style('lubuvna-datatables_style_responsive_bootstrap', 'https://cdn.datatables.net/responsive/2.2.3/css/responsive.bootstrap4.min.css');
wp_enqueue_style('lubuvna-datatables_style_responsive_bootstrap');
}
  
add_action('wp_enqueue_scripts', 'add_datatables_scripts_subscriber');
add_action('wp_enqueue_scripts', 'add_datatables_style_subscriber');



/*
// subscriber datatables Javascript
function subscriber_datatables_scripts() {
wp_enqueue_script( 'subscriber_datatables', get_stylesheet_directory_uri(). '/subscribertable.js', array(), '1.0', true );
wp_localize_script( 'subscriber_datatables', 'ajax_url', admin_url('admin-ajax.php?action=subscriber_datatables') );
}
*/

// to use ajaxurl directly, in your plugin file add this
add_action('wp_head', 'subscriber_datatables_scripts');
function subscriber_datatables_scripts() {

   echo '<script type="text/javascript">
           var ajax_url = "' . admin_url('admin-ajax.php?action=subscriber_datatables') . '";
         </script>';
}


// subscriber Datatables shortcode [subscriber_datatables]
function subscriber_datatables() {
     
    subscriber_datatables_scripts(); 
     
    ob_start(); ?> 
    <table id="subscribertable" class="table table-striped table-bordered dt-responsive nowrap" style="width:100%"> 
        <thead>
            <tr>
                <th>Title</th>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Email</th>
                <th>Phone</th>
            </tr>
        </thead>
    </table> 
         
    <?php 
    return ob_get_clean(); 
}
 
add_shortcode ('subscriber_datatables', 'subscriber_datatables');



// setting up the callback function
add_action('wp_ajax_subscriber_datatables', 'datatables_server_side_callback_subscriber');
add_action('wp_ajax_nopriv_subscriber_datatables', 'datatables_server_side_callback_subscriber');
 
 
function datatables_server_side_callback_subscriber() {
 
    header("Content-Type: application/json");
 
    $request= $_GET;
 
    $columns = array(
        0   => 'post_title',
        1   => 'lbu_first_name',
        2   => 'lbu_last_name',
        3   => 'lbu_email',
        4   => 'lbu_phone'
        
    );
 
 
    $args = array(
        'post_type' => 'lubuvna_subscriber',
        'post_status' => 'publish',
        'posts_per_page' => $request['length'],
        'offset' => $request['start'],
        'order' => $request['order'][0]['dir'],
    );
 
    if ($request['order'][0]['column'] == 0) {
 
        $args['orderby'] = $columns[$request['order'][0]['column']];
 
    } elseif ($request['order'][0]['column'] == 1 || $request['order'][0]['column'] == 2) {
 
        $args['orderby'] = 'meta_value_num';
 
        $args['meta_key'] = $columns[$request['order'][0]['column']];
    }
 
    //$request['search']['value'] <= Value from search
 
    if( !empty($request['search']['value']) ) { // When datatables search is used
        $args['meta_query'] = array(
            'relation' => 'OR',
            array(
                'key' => 'd_title',
                'value' => sanitize_text_field($request['search']['value']),
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'lbu_first_name',
                'value' => sanitize_text_field($request['search']['value']),
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'lbu_last_name',
                'value' => sanitize_text_field($request['search']['value']),
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'lbu_email',
                'value' => sanitize_text_field($request['search']['value']),
                'compare' => 'LIKE'
            ),
            array(
                'key' => 'lbu_phone',
                'value' => sanitize_text_field($request['search']['value']),
                'compare' => 'LIKE'
            ),
        );
    }
        
    $subscriber_query = new WP_Query($args);
    $totalData = $subscriber_query->found_posts;
 
    if ( $subscriber_query->have_posts() ) {
         
        while ( $subscriber_query->have_posts() ) {
         
            $subscriber_query->the_post();
 
            $nestedData = array();
            $nestedData[] = get_the_title();
            $nestedData[] = get_field('lbu_first_name');
            $nestedData[] = get_field('lbu_last_name');
            $nestedData[] = get_field('lbu_email');
            $nestedData[] = get_field('lbu_phone');
 
            $data[] = $nestedData;
 
        }
 
        wp_reset_query();
 
        $json_data = array(
            "draw" => intval($request['draw']),
            "recordsTotal" => intval($totalData),
            "recordsFiltered" => intval($totalData),
            "data" => $data
        );
 
        echo json_encode($json_data);
 
    } else {
 
        $json_data = array(
            "data" => array()
        );
 
        echo json_encode($json_data);
    }
     
    wp_die();
 
}


подписку. js файл

jQuery(document).ready(function($) {

    $(document).ready(function() {
      
    $('#subscribertable').dataTable({
    "processing": true,
    "serverSide": true,
    "ajax": ajax_url
    });
      
    });

});

Когда выполняется ручное обновление sh, я могу видеть ajax администратора * вызов When manual refresh is made i can see the admin-ajax call

When .sidebarlink clicked no admin-ajax call Когда .sidebarlink не нажимался, администратор - ajax не звонил

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...