@ronni10

Как сделать кнопку «загрузить еще» без плагина?

Плагины не помогают,потому что случай специфичный. Нужно подгружать записи при клике(пользовательские) через аякс. При клике делаю запрос в базу данных .Может кто-нибудь пример привести?
Есть такой вариант,но я чего-то в нем не понимаю.Я хочу вывести готовый div ,но когда вставляю его в цикл ,то в консоли ошибка : "Uncaught TypeError: Cannot read property 'offset' of undefined";
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: my_ajax_object.ajax_url,
            type: 'POST',
            data: {
                offset: $offset,
                action: 'load_more_posts'
            },
            success:function(response){
                console.log(response);
                $('#load_more_posts').data('offset', parseInt(response.data.offset));
               

            }
        }); 
    });

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;
    $rst=[];
    $country_id=get_the_id();
    $query = new WP_Query(array(
            'post_type'     => 'hotel',
            'posts_per_page'=> 2,
            'offset'=> $_POST['offset'],
            'meta_query'     => array(
                array(
                    'key' => 'acf_hotel_country', // name of custom field
                    'value' => $country_id, // matches exactly "123", not just 123. This prevents a match for "1234"
                    'compare' => 'LIKE'
                )
            )
        ));

    if($query->have_posts()):
        while($query->have_posts()):$query->the_post();
             $rst[] = $post;
        endwhile;
        wp_reset_postdata();
        $offset = $_POST['offset']+2;
        
        
    endif;
   wp_send_json_success(array('post'=>$rst, 'offset'=>$offset));
}

так он работает ,но когда в цикле после или перед $rst[] = $post; что-то дописать,то "Uncaught TypeError: Cannot read property 'offset' of undefined"
  • Вопрос задан
  • 553 просмотра
Пригласить эксперта
Ответы на вопрос 2
MedVedar
@MedVedar
e-commerce developer
но когда в цикле после или перед $rst[] = $post; что-то дописать

Что конкретно вы пытаетесь дописать?

Может лучше и проще будет написать новый код, чем править этот?

Что такого специфичного, что нельзя прикрутить ajax-load-more или infinite-scroll.js?
Ответ написан
azerphoenix
@azerphoenix
Java Software Engineer
Здравствуйте!
1) Что за специфичный случай, если этот плагин не помогает)) - https://ru.wordpress.org/plugins/ajax-load-more/
2) Там же написано, что offset is undefined.
data: {
                offset: $offset,
                action: 'load_more_posts'
            },


Вы указали вариацию $offset а где значение этой вариации? Или попробуйте его вообще удалить полностью offset: $offset,
Ответ написан
Ваш ответ на вопрос

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

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