Я всегда получаю тот же пост. Я не понимаю, почему я всегда получаю тот же пост (первый) и не все сообщения. Кто-то?
Как я могу получить второй пост или третий, и т.д.? Заранее спасибо.
function my_lateral_fluid() {
$data = array();
$args = array(
"post_type" => "portfolio",
"posts_per_page" => -1
);
$portfolio_query = new WP_Query($args);
while($portfolio_query -> have_posts() ){
$portfolio_query -> the_post();
$data = '
<div id="all-content" class="container abs-position">
<div id="primary" class="content-area-ajax text-center">
<main id="main" class="site-main" role="main">
<article id="post-'. get_the_ID().'"'. post_class().'>
<h1 class="entry-title">'.get_the_title().'</h1>
<div class="entry-content">'.get_the_content().'</div>
</article>
</main>
</div>
</div>
';
}
wp_reset_postdata();
echo '<div id="postdata">'.$data.'</div>';
wp_die();
}
ЗДЕСЬ: боковая жидкость.
var origHeight= 0;
jQuery(function($){
jQuery('.more-info').click(function() {
origHeight = jQuery('#show').height();
//var postid = $(this).attr('data-postid');
var page = jQuery(this).attr('data-href');
jQuery.ajax({
url: ajaxFluid.ajaxurl,
type: 'get',
page: page,
data: {
action: 'lateral_fluid'
},
success: function( data ) {
console.log(data);
var $response = $(data);
var postdata = $response.filter('#postdata').html();
//ajax load data
jQuery('#ajax-inserted1').html(postdata);
//animate portfolio grid to left
jQuery('#remove').removeClass('to-screen').addClass('to-left');
},
complete: function(){
//animate post to screen from right to left
jQuery('.entry-content a img, .entry-content img').load(function () {
jQuery('#ajax-inserted1, .controlls').removeClass('to-right').addClass('to-screen');
//HEIGHT CONTENT CALCULATION
var newHeight = jQuery('#ajax-inserted1 #primary').height()+100;
var el = jQuery('.show-container');
el.css({'height': newHeight + 'px'});
//STELLAR REFRESH
setTimeout(stellarRefresh, 500);
function stellarRefresh() {
jQuery.stellar('refresh');
}
});
}
});
});
jQuery('#close-portfolio').click(function() {
jQuery('#ajax-inserted1').removeClass('to-screen').addClass('to-right');
jQuery('#remove').removeClass('to-left').addClass('to-screen');
jQuery('.controlls').removeClass('to-screen').addClass('to-right');
//ORIGINAL HEIGHT
jQuery('.show-container').css({'height': origHeight + 'px'});
setTimeout(ajaxEmpty, 500);
function ajaxEmpty() {
jQuery('#ajax-inserted1').empty();
}
});
});
Внутри цикла have_posts()
вы каждый раз перезаписываете $data
а затем have_posts()
его только после завершения цикла, который показывает только последний пост в цикле (последнее сообщение).
Или добавьте каждое сообщение в $data
(используя $data.= <html code>
) или переместите echo '<div id="postdata">'.$data.'</div>';
внутри цикла while.
Попробуйте следующее:
function my_lateral_fluid() {
$data = '';
$args = array(
"post_type" => "portfolio",
"posts_per_page" => -1
);
$portfolio_query = new WP_Query($args);
if ( $portfolio_query -> have_posts() ) {
while( $portfolio_query -> have_posts() ){
$portfolio_query -> the_post();
$data .= '
<div id="all-content" class="container abs-position">
<div id="primary" class="content-area-ajax text-center">
<main id="main" class="site-main" role="main">
<article id="post-'. get_the_ID().' " '. post_class().'>
<h1 class="entry-title">'.get_the_title().'</h1>
<div class="entry-content">'.get_the_content().'</div>
</article>
</main>
</div>
</div>
';
}
}
wp_reset_postdata();
die($data);
}
И в вашем действии ajax используйте my_lateral_fluid
вместо lateral_fluid
. Также, поскольку вы определили jQuery(function($){...});
вы можете использовать $
вместо jQuery
везде в вашем коде.
В своем аякс-вызове вы хотите append
свои данные в <div id="postdata"></div>;
,
Привет, вы использовали обычную переменную. Когда цикл продолжается, старые данные будут заменены вашим новым сообщением. Поэтому либо вы можете сделать
$data='';
while($portfolio_query -> have_posts() ){
$data.= '
<div id="all-content" class="container abs-position">
код останова будет таким же.