Задача:
Выводить на странице посты (любой post_type, любой term) из базы порциями (любое количество), подгружая их из базы без перезагрузки страницы.
Понять принцип разделения логики и представления, реализовать шаблонизацию на стороне клиента.
Написана jquery функция:
1. Передаем набор параметров (тип поста, таксономия, термин и т. д.)
2. На основе полученных параметров получаем посты, используя get_posts
3. Возвращаем посты на страницу в формате json и разворачиваем их шаблонизатором.
Посты загружаются порциями, по нажатию на кнопку "показать ещё".
Фрагменты кода:
$.ajax({
type: 'POST',
url: 'путь-к-файлу.php',
data: 'post_type=' + post_type + '&tax=' + tax + '&term=' + term + '&count=' + count + '&offset=' + offset,
cache: false,
beforeSend: function(){
$($more).addClass('is-loading');
},
success: function(data){
var parse = JSON.parse(data);
var render_data = {
'posts': parse
};
var template = Handlebars.compile( $('#' + viev_template).html() );
$($content).append( template(render_data) );
$posts = get_posts($args);
foreach( $posts as $post ){
setup_postdata($post);
$post_id = $post->ID;
$post_permalink = get_permalink();
// прочие переменные
$new_array[] = array(
'id' => $post_id,
'permalink' => $post_permalink,
'title' => $post_title,
'thumbnail' => $post_thumbnail_url[0],
'photo' => $post_photo[0],
'photographer' => $photographer,
'link' => $show_link,
);
echo json_encode($new_array);
Всё работает, но есть одно но...
У одного из типов постов требуется выводить данные в формате html (с расставленными абзацами).
В массив отправляю следующую переменную:
$formated_text = wpautop($text);
На выходе, вместо
<p>Текст</p>
Получаю
<p>текст</p>
Пожалуйста, подскажите:
1. Как сохранить html-теги, переданные в json? Подозреваю, что теряются они на JSON.parse.
2. Насколько неправильно использовать json для передачи html? Какова альтернатива?
Если заметили какие-то грубые и не очень грубые ошибки в моём коде (и подходе к решению задачи вообще) - пишите! Буду признателен.