Могу ли я отправить отфильтрованные данные с помощью Ajax обратно в файл PHP и снова записать их на странице? - PullRequest
0 голосов
/ 23 сентября 2018

Я реализовал свой пользовательский тип поста, и его содержимое указано на моей странице в цикле while следующим образом:

 $args = array('post_type' => 'studien', 'order' => 'ASC', 'posts_per_page' => 4 );

        $loop = new WP_Query($args);

        if($loop->have_posts()):
        while($loop->have_posts()) : $loop->the_post();?>

        <div class="col-md-6">
         // data are listed here
        </div>
          <?php endwhile;
        endif;
        ?>

И при отправке я пытаюсь отфильтровать данные в соответствии с некоторыми пользовательскими таксономиями:

$ = jQuery;

var search = $("#search-studien");

var searchForm = search.find("studien");

$(document).ready(function () {

    $('#studien').submit(function (evt) {
        event.preventDefault();

        var data = {
            action: "studien_search",
            type: $("#taxonomy-market-type").val(),
        };


        var html;

        $.ajax({
            url: ajaxurl,
            data: data,
            success: function (response) {

                if(response)
                {
                    // probably here I need to send filtered data back to PHP file and write them again
                }

            }
        });
    })
});

Я использую пользовательские функции шорткода и callback ():

function search_callback()
{
    header('Content-Type: application/json;charset=utf-8');

        $type = "";


        $type = $_GET['type'];


    $args = array(
            "post_type" => "studien",
            "post_per_page" => -1,
            "relation" => "AND"
    );


    if($type != "") {
        $args['tax_query'][] = array(

            'taxonomy' => 'market',
            'field' => 'slug',
            'terms' => $type
        );

       $search_query = new WP_Query($args);

       // echo json_encode($search_query);
    }


    else{
        $search_query = new WP_Query( $args );
    }

    if ( $search_query->have_posts() ) {

        $result = array();

        while ($search_query->have_posts()) {

            $search_query->the_post();

            $result[] = array(
                "id" => get_the_ID(),
                "title" => get_the_title(),
                "permalink" => get_permalink(),


            );
        };


        wp_reset_query();

        echo json_encode($search_query);
    }

    else {
        // nothing
    }



    wp_die(); global $argsAjaxFilter;

    $argsAjaxFilter = $search_query;


}

Как видите, $ search_query представляет мои отфильтрованные данные.Это метод согласно учебнику, но я не могу использовать response array () ... и лучший способ для меня - это отправить $ search_query каким-либо образом в файл PHP, где я снова могу записать свои новые данные пользовательского типа записи.Пожалуйста, у кого-нибудь есть совет для меня?Это хорошее предложение?

1 Ответ

0 голосов
/ 23 сентября 2018

Таким образом, основная проблема заключается в том, чтобы иметь возможность отправлять визуализированный html в браузер.Для этого нам понадобится шаблон, чтобы мы могли повторно использовать его в разных местах.

// your-theme/studien.php
<div class="studien-wrapper">
<?php
  if($wp_query->have_posts()):
    while($wp_query->have_posts()) : $wp_query->the_post();
      // Do the thing
    endwhile;
  endif;
?>
</div>

Далее нам нужно загружать его всякий раз, когда это необходимо.Мы можем сделать это, используя get_template_part.Эта функция автоматически передает некоторые глобальные переменные (например, $wp_query) в шаблон. Чтобы узнать больше, вы можете взглянуть на исходный код .При использовании его в «режиме ajax» нам нужно захватывать выходные данные, а не отправлять их в браузер (хотя мы могли бы), поэтому мы используем буферизацию вывода.Для «обычных страниц» просто пропустите эти вызовы.

// Set up query args
global $wp_query = new WP_Query($args);
ob_start();  // Capture the output.
get_template_part('studien');
$html_result = ob_get_clean(); 

А теперь нужно составить ответ:

$result['html'] = $html_result;
if (!is_array($type)) {
  $type = array($type);
}
$result['query_terms'] = $type;

$json = wp_json_encode($result);
echo $json;

wp_die();

Вы также можете отслеживать условия поиска на клиентесторона и избежать последней части.Зависит от того, что вам нужно.

Чтобы обновить страницу, вы можете сделать следующее в вашем вызове ajax:

$.ajax({
    url: ajaxurl,
    data: data,
    success: function (response) {
        $('.studien-wrapper').replaceWith(response.html);
        // Update search terms, etc
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...