Timber-WordPress,在ajax调用后将数据(json)附加到Timber\Post对象

Timber-WordPress,在ajax调用后将数据(json)附加到Timber\Post对象,ajax,wordpress,twig,timber,Ajax,Wordpress,Twig,Timber,更新3 请看下面的答案!如有需要,可根据要求提供进一步解释 更新2 js php函数 add_action('wp_ajax_more_all_posts', __NAMESPACE__ . '\\ajax_more_all_posts'); add_action('wp_ajax_nopriv_more_all_posts', __NAMESPACE__ . '\\ajax_more_all_posts'); function ajax_more_all_posts() { $re

更新3 请看下面的答案!如有需要,可根据要求提供进一步解释

更新2

js

php函数

add_action('wp_ajax_more_all_posts', __NAMESPACE__ . '\\ajax_more_all_posts');
add_action('wp_ajax_nopriv_more_all_posts', __NAMESPACE__ . '\\ajax_more_all_posts');
function ajax_more_all_posts()
{ 

    $response = array(
       'data' => Timber::compile(array('templates/blocks/content.twig'), $context)
    );
    wp_send_json($response);


}
HTML被重新发布,但只发布了1篇文章,而且数据没有填充细枝标记

旧的****

因此,在我的博客页面上,我想加载更多的帖子,我想知道是否可以将响应数据附加到页面上的posts数组aleady中。或者,如果需要建立一个特定的方式来考虑这一点

如有任何提示/帮助,将不胜感激

下面的代码示例

我在我的小树枝文件中设置了以下内容:

{% for post in posts %}
            {% set postCount = loop.index %}    


            {% set postImage = TimberImage(post.get_field('preview_image_post'))|resize('medium_large') %}

            {% include "blocks/content.twig" with {post: post}  %}  

        {% endfor %}
将帖子输出到页面上即可

然后,我发出一个ajax请求,执行以下操作:

window.axios.get(fancySquaresRestUrl + 'wp/v2/posts', {
            params: getParams
        })
        .then(function (response) {




          // append the entire repsonese? wasn't working, could be doing it wrong

            _.each( response.data, function( post, index ) {

                  //append each object on its own maybe???
            });




        })
        .catch(function (error) {
            console.log(error);
        });

我已经做了一些接近的事情。我的解决方案是在ajax上渲染并发送html

因此,我的Ajax调用了一个php,并在php中执行以下操作:

对于本例,我的ajax调用
get\u php\u逻辑
操作。 在php操作中,我执行逻辑来呈现细枝,最后返回Json响应

$response = array(
   'data' => Timber::compile(array('template.twig'), $context)
);
wp_send_json($response);

因此,通过这种方式,我的response.data将是html,可以进行追加或替换。

完整答案如下:(这不是将任何内容追加到Timber/Post对象,这是从传递到twig文件的数据中追加html)

您对以下代码有任何问题或意见,请随时提出

js使用了:

$archiveLayout.on('click',loadMoreButtonID,function(){


    var $this = $(this);

    var pageCount = $(this).attr('data-pageCount');
    var nextPage = parseInt($(this).attr('data-page')) + 1;

    var getParams = void 0;

    _.each($loadMoreButton, function (item) {
        var thisData = window.$(item).data();
        getParams = thisData;
    });
    getParams.pagecount = pageCount;
    // console.log(getParams);

    $loader.fadeIn();
    $loadMoreButton.fadeOut();
    $.post(ajaxurl, getParams, function (response) {
        // var json_obj = JSON.parse(res);  
        // console.log(response);
        //console.log(response.data);


        if(response === 'nomore'){
            $loadMoreButton.fadeOut();
        } else {
            for(var hp = 0; hp < response.length; hp++){
                $('[data-js="append-content"]').append(response[hp].data);
                $this.attr('data-pageCount', Number(pageCount)+1);
            }

            $loadMoreButton.fadeIn();
        }


    }).done(function () {
        $loader.fadeOut();
        // $('#load-more').attr('data-page', nextPage);
    });

});

您的response.data不是html吗?@marciojc不是JSONI如果您使用的是ajax,那么只需使用jQuery的
.append()
.after()
,如果ajax响应中的数据是html…您的ajax请求将返回什么?HTML?一系列的帖子?帖子数组?如果是JSON,则需要手动渲染。也许返回HTML可以腾出一些时间。@marciojc您建议如何使用细枝模板执行此操作。对不起,您可以向我展示更多示例吗?@RMH我更新我的aswner,这也将帮助您返回HTML,但细枝文件中的数据未填充。在php函数中,是否运行for循环,将过去的数据复制到渲染的细枝文件中?我已经更新了代码以匹配我现在的代码。@RMH yes在我的小枝中我正在循环上下文数据。别忘了用所需的信息填充上下文变量。
$archiveLayout.on('click',loadMoreButtonID,function(){


    var $this = $(this);

    var pageCount = $(this).attr('data-pageCount');
    var nextPage = parseInt($(this).attr('data-page')) + 1;

    var getParams = void 0;

    _.each($loadMoreButton, function (item) {
        var thisData = window.$(item).data();
        getParams = thisData;
    });
    getParams.pagecount = pageCount;
    // console.log(getParams);

    $loader.fadeIn();
    $loadMoreButton.fadeOut();
    $.post(ajaxurl, getParams, function (response) {
        // var json_obj = JSON.parse(res);  
        // console.log(response);
        //console.log(response.data);


        if(response === 'nomore'){
            $loadMoreButton.fadeOut();
        } else {
            for(var hp = 0; hp < response.length; hp++){
                $('[data-js="append-content"]').append(response[hp].data);
                $this.attr('data-pageCount', Number(pageCount)+1);
            }

            $loadMoreButton.fadeIn();
        }


    }).done(function () {
        $loader.fadeOut();
        // $('#load-more').attr('data-page', nextPage);
    });

});
add_action('wp_ajax_more_all_posts', __NAMESPACE__ . '\\ajax_more_all_posts');
add_action('wp_ajax_nopriv_more_all_posts', __NAMESPACE__ . '\\ajax_more_all_posts');
function ajax_more_all_posts()
{ 

$cat_id = $_REQUEST[ 'cat' ] or $_GET[ 'cat' ];
$paged = $_REQUEST['pagecount'];
$cat = $_REQUEST['dataCat'];



$args = [
    'cat' => $cat_id,
    'posts_per_page' => 9,
    'post_status' => 'publish'
];

if($paged != ""){
    $args['paged'] = $paged; 
}

$posts = Timber::get_posts($args);
$message = [];
if($posts){
    foreach($posts as $post){
        $response = array(
            'data' => Timber::compile('templates/blocks/content.twig', ['post' => $post])
        );
        $message[] = $response;
    }
} else {
    $message = "nomore";
}
wp_reset_query();
wp_reset_postdata();

wp_send_json($message);
die();
}