Я строю свой бесконечный цикл для своего блога. Все работает отлично, но если нет записей для показа, мой бесконечный цикл загружается снова и снова с другими элементами дизайна. Как добавить условия в мой бесконечный цикл, чтобы он мог остановиться, если список сообщений заканчивается.
AJAX для загрузки бесконечного цикла
<script>
$(document).ready(function() {
var post_page_count = 0;
var height_scroll = 400;
$(window).scroll(function() {
if ($('body').height() <= ($(window).height() + $(window).scrollTop())){
$.ajax({
type: "POST",
async: false,
url: "/loopa/infiloop.php",
data: {pcount:post_page_count},
success:
function(result){
$("#looppage").append(result);
}
});
post_page_count = post_page_count+20;
}
});
});
</script>
Цикл, который я использую:
<?php
$infinite_loop= $_POST['pcount']; ?>
<?php require('../wp-config.php');
$wp->init();
$wp->parse_request();
$wp->query_posts();
$wp->register_globals(); ?>
<div class="myclass" role="main">
<?php
global $wpdb;
$args = array( 'posts_per_page' => 20, 'order' => 'DESC', 'offset'=>$infinite_loop, 'category' => 613);
$myposts = get_posts( $args );
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>><div>
<div class="gizinfi-img">
<?php giz_featured_index(); ?>
</div>
<div class="gizinfi-title">
<?php /* print $args['offset']; */ ?>
<?php giz_get_view( 'gizc', '_content', 'post-header' ); ?>
</div>
</div>
</article>
</div>
<?php if (!giz_wp_is_mobile() ) { ?>
<?php get_sidebar(); ?>
<?php } ?>
Просто используйте break
<?php $baz = array('foo', 'bar', 'baz');
foreach ($baz as $foo) {
echo $foo;
if ($foo == 'bar') {
break();
}
} ?>
// I haven't tested it, but it should output `foo``bar` then break.
// just replace the if check with a check for the last element.
Ну, я бы сказал, что это на самом деле не бесконечный цикл, это просто ajax, запускаемый без остановки, и включается, если больше не осталось сообщений.
Итак, чтобы исправить это:
`
$ (документ) .ready (function () {
var post_page_count = 0;
var height_scroll = 400;
var no_more_posts = false;
$(window).scroll(function() {
if(no_more_posts) return;
if ($('body').height() <= ($(window).height() + $(window).scrollTop())){
$.ajax({
type: "POST",
async: false,
url: "/loopa/infiloop.php",
data: {pcount:post_page_count},
success:
function(result){
if(result=="done"){
no_more_posts = true;
}else{
$("#looppage").append(result);
}
}
});
post_page_count = post_page_count+20;
}
});
});
Then:
$infinite_loop= $_POST['pcount']; ?>
<?php require('../wp-config.php');
$wp->init();
$wp->parse_request();
$wp->query_posts();
$wp->register_globals();
$args = array( 'posts_per_page' => 20, 'order' => 'DESC', 'offset'=>$infinite_loop, 'category' => 613);
$myposts = get_posts( $args );
if(!$myposts->found_posts){
echo "done";
die;
}
?><div class="myclass" role="main">
<?php
global $wpdb;
foreach ( $myposts as $post ) : setup_postdata( $post ); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<div>
<div class="gizinfi-img">
<?php giz_featured_index(); ?>
</div>
<div class="gizinfi-title">
<?php /* print $args['offset']; */ ?>
<?php giz_get_view( 'gizc', '_content', 'post-header' ); ?>
</div>
</div>
</article>
<?php endforeach ?>
<?php wp_reset_postdata() ?>
</div>
<?php if (!giz_wp_is_mobile() ) { ?>
<?php get_sidebar(); ?>
<?php } ?>`
Также там, где отсутствует endforeach и я сбрасываю постданные