Задать вопрос

Как передать HTML в JSON, или js-шаблонизация в wordpress?

Задача:
Выводить на странице посты (любой 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>
Получаю
&lt;p&gt;текст&lt;/p&gt;

Пожалуйста, подскажите:
1. Как сохранить html-теги, переданные в json? Подозреваю, что теряются они на JSON.parse.
2. Насколько неправильно использовать json для передачи html? Какова альтернатива?

Если заметили какие-то грубые и не очень грубые ошибки в моём коде (и подходе к решению задачи вообще) - пишите! Буду признателен.
  • Вопрос задан
  • 11872 просмотра
Подписаться 6 Оценить Комментировать
Решения вопроса 1
andrhohlov
@andrhohlov Автор вопроса
Проблема оказалась вовсе в другом месте)
Handlebars.compile, чтоб его!

Чтобы сохранить html теги, нужно вместо {{text}} в шаблоне использовать тройные скобки: {{{text}}}.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы