javascript - 如何使用 ajax 加载更多 Logo ?

标签 javascript php ajax custom-post-type

我找到了一个解决方案,如何让加载更多按钮在点击时显示更多内容,但它是针对帖子的,我想让它适用于我的自定义帖子类型“Klanten”。

我尝试编辑代码以匹配我的帖子类型,但出现错误:“ undefined index :偏移量”

函数.php

wp_enqueue_script( 'dfib-theme-custom', get_template_directory_uri() .'/js/custom.js', array('jquery') );
wp_localize_script( 'dfib-theme-custom', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php')) );


add_action( 'wp_ajax_load_more_posts', 'load_more_posts' );
add_action( 'wp_ajax_nopriv_load_more_posts', 'load_more_posts' );

function load_more_posts(){
    global $post;
    $args = array('post_type'=>'klanten', 'posts_per_page'=> 4, 'offset'=> $_POST['offset']);
    $rst=[];
    $query = new WP_Query($args);
    if($query->have_posts()):
        while($query->have_posts()):$query->the_post();
            $rst[] = $post;
        endwhile;
        wp_reset_postdata();
        $offset = $_POST['offset']+4;
    endif;
    wp_send_json_success(array('klanten'=>$rst, 'offset'=>$offset));
}

自定义.js

$('#load_more_posts').on('click', function(e){
    console.log('hi');
    e.preventDefault();
    var $offset = $(this).data('offset');
    console.log('var'+$offset);
    $.ajax({
        method: 'POST',
        url: ajax_object.ajax_url,
        type: 'JSON',
        data: {
            offset: $offset,
            action: 'load_more_posts'
        },
        success:function(response){
            console.log(response);
            $('#load_more_posts').data('offset', parseInt(response.data.offset));
        }
    }); 
})

php文件

$query = new WP_Query( array(
        'post_type' => 'klanten',
        'posts_per_page' => 4,
        'offset' => 0,
        'paged' => 1,
        'order' => 'ASC',
        'orderby' => 'rand',
    ) );
    if ( $query->have_posts() ) { ?>
        <div class="klanten__wrapper">
            <?php
            while ( $query->have_posts() ) : 
                $query->the_post(); 
                ?>
                <div class="logo__wrapper">
                    <img class="klant__logo" src="<?php the_post_thumbnail_url(); ?>">
                </div>
            <?php endwhile; ?>
            <div id="load_more_posts" class="loadmore">Load More...</div>
        </div>

        <?php 
        wp_reset_postdata(); 
        return ob_get_clean();
    }

控制台日志 enter image description here

我想显示 4 个 Logo (元素),并且每次有人单击加载更多按钮时再加载 4 个

最佳答案

替换这个

<div id="load_more_posts" class="loadmore" data-offset="4">Load More...</div>

您需要返回带有 Logo 数组的 ajax 数据,然后像下面的代码一样附加数据。 AJAX 调用

$('#load_more_posts').on('click', function(e){
        console.log('hi');
        e.preventDefault();
        var $offset = $(this).data('offset');
        console.log('var'+$offset);
        $.ajax({
            method: 'POST',
            url: ajax_object.ajax_url,
            type: 'JSON',
            data: {
                offset: $offset,
                action: 'load_more_posts'
            },
            success:function(response){
                console.log(response);
                 var html = "";
                 $(response.data.klanten).each(function(index,value) {
                      html += '<div class="logo__wrapper"> <img class="klant__logo" src="'+value.post_thumbnail+'"></div>'
                 }); 
                 $('.logo_wrapper').append(html);
                $('#load_more_posts').data('offset', 
                  parseInt(response.data.offset));
            }
        }); 
    })

HTML代码

 <div class="klanten__wrapper">
 <div class="logo_wrapper">
            <?php
            while ( $query->have_posts() ) : 
                $query->the_post(); 
                ?>
                <div class="logo__wrapper">
                    <img class="klant__logo" src="<?php the_post_thumbnail_url(); ?>">
                </div>
            <?php endwhile; ?>
            <div>
            <div id="load_more_posts" class="loadmore">Load More...</div>
        </div>

函数.php

wp_enqueue_script( 'dfib-theme-custom', get_template_directory_uri() .'/js/custom.js', array('jquery') );
wp_localize_script( 'dfib-theme-custom', 'ajax_object', array('ajax_url' => admin_url('admin-ajax.php')) );


add_action( 'wp_ajax_load_more_posts', 'load_more_posts' );
add_action( 'wp_ajax_nopriv_load_more_posts', 'load_more_posts' );

function load_more_posts(){
    global $post;
    $args = array('post_type'=>'klanten', 'posts_per_page'=> 4, 'offset'=> $_POST['offset']);
    $rst=[];
    $query = new WP_Query($args);
    if($query->have_posts()):
        while($query->have_posts()):$query->the_post();
            $rst[] = $post;
            $post_thumbnail = get_the_post_thumbnail($post->id);  
            $rst['post_thumbnail'] = $post_thumbnail;
        endwhile;
        wp_reset_postdata();
        $offset = $_POST['offset']+4;
    endif;
    wp_send_json_success(array('klanten'=>$rst, 'offset'=>$offset));
}

关于javascript - 如何使用 ajax 加载更多 Logo ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57801707/

相关文章:

php - 如何将 xampp php 版本升级到 php 7

php - 在 Kohana 中,你能触发 404 错误吗?

php - 在 ajax 请求中使用带有 jQ​​uery 的 dataType 脚本获取响应

php - PHP 中如何计算一个值是否超出一个标准差

javascript - jQuery post,在回调中访问responseType或response

javascript - 我是否有可能阻止黑客使用 Web 控制台使用 JavaScript 重复调用 upvote (AJAX) 函数?

javascript - React - 表单提交后清除电子邮件输入字段

javascript - if 语句卡在 else

javascript - 如何用多个字符替换字符串中的一个字符

javascript - 使用 Google Maps API 根据地址动态嵌入 map - 需要使用 Google 的数据作为标记/气泡