Ajax 加载更多和 ACF 分类法

问题描述

我将 this Ajax Load More button 用于两个 CPT 存档页面,它们工作得很好。 我还希望能够向 ACF 灵活内容添加相同的加载更多按钮,这些块按分类法(使用 ACF 分类法字段)拉取帖子。

我似乎无法正常工作,想知道是否有人能看到我哪里出错了。

模板代码

<?PHP $vid_category = get_sub_field('video_category'); // acf taxonomy field ?>

<div class="video-posts-cat-block">
  <div class="container videos-container">

    <?PHP
      $posts = get_posts(array(
        'post_type'         => 'videos','posts_per_page'    => 4,'post_status'       => 'publish','orderby'           => 'date','order'             => 'ASC','tax_query' => array(
          'taxonomy' => 'video_category','terms' => $vid_category,)
      ));
      
      if( $posts ):
    ?>
      <ul class="posts video-posts">
        <?PHP
          foreach( $posts as $post ):
            $thumb = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
        ?>
          <li class="post">
            <div class="image" style="background-image: url('<?PHP echo $thumb; ?>');"></div>
            <h3 class="title"><?PHP echo the_title(); ?></h3>
         </li>
        <?PHP
          endforeach;

          // ajax load more button
          global $wp_query;
          if (  $wp_query->max_num_pages > 1 )
          echo '<a class="misha_loadmore button">Load more</a>';
        ?>
      </ul>
    <?PHP endif; ?>
  </div>
</div>

functions.PHP

// AJAX Load More Button
function misha_my_load_more_scripts() {

    global $wp_query;
    wp_enqueue_script('jquery');
    wp_register_script( 'my_loadmore',get_stylesheet_directory_uri() . '_static/js/main.js',array('jquery') );

    wp_localize_script( 'my_loadmore','misha_loadmore_params',array(
        'ajaxurl' => site_url() . '/wp-admin/admin-ajax.PHP','posts' => json_encode( $wp_query->query_vars ),'current_page' => get_query_var( 'paged' ) ? get_query_var('paged') : 1,'max_page' => $wp_query->max_num_pages
    ) );

    wp_enqueue_script( 'my_loadmore' );
}

add_action( 'wp_enqueue_scripts','misha_my_load_more_scripts' );

// AJAX Load More Button - AJAX Handler
function misha_loadmore_ajax_handler(){

    $args = json_decode( stripslashes( $_POST['query'] ),true );
    $args['paged'] = $_POST['page'] + 1;
    $args['post_status'] = 'publish';

    query_posts( $args );

    if( have_posts() ) :
        while( have_posts() ): the_post();
            get_template_part( '_template-parts/loop-archive',get_post_type() );
        endwhile;
    endif;
    die; // here we exit the script and even no wp_reset_query() required!
}
add_action('wp_ajax_loadmore','misha_loadmore_ajax_handler');
add_action('wp_ajax_nopriv_loadmore','misha_loadmore_ajax_handler');

js 文件

// AJAX Load More Button
jQuery(function($){
    $('.misha_loadmore').click(function(){

        var button = $(this),data = {
            'action': 'loadmore','query': misha_loadmore_params.posts,'page' : misha_loadmore_params.current_page
        };

        $.ajax({
            url : misha_loadmore_params.ajaxurl,data : data,type : 'POST',beforeSend : function ( xhr ) {
                button.text('Loading...');
            },success : function( data ){
                if( data ) {
                    var $scrollpos = button.offset().top - 150;
                    button.text( 'Load more ' ).prev().after(data);
                    $(document).scrollTop($scrollpos)
                    misha_loadmore_params.current_page++;
                    if ( misha_loadmore_params.current_page == misha_loadmore_params.max_page )
                    button.remove();
                } else {
                    button.remove();
                }
            }
        });
    });
});

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)