Всегда получайте один и тот же пост (первый)

-1

Я всегда получаю тот же пост. Я не понимаю, почему я всегда получаю тот же пост (первый) и не все сообщения. Кто-то?

Как я могу получить второй пост или третий, и т.д.? Заранее спасибо.

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();
        }

    });

});
  • 0
    похоже, нет проблем в коде .. где вы вызываете свою функцию my_носторонний_флюид ()? не могли бы вы поставить код?
  • 0
    @PHPWeblineindia Есть проблема с кодом ;-)
Показать ещё 3 комментария
Теги:
custom-post-type

3 ответа

1

Внутри цикла have_posts() вы каждый раз перезаписываете $data а затем have_posts() его только после завершения цикла, который показывает только последний пост в цикле (последнее сообщение).

Или добавьте каждое сообщение в $data (используя $data.= <html code>) или переместите echo '<div id="postdata">'.$data.'</div>'; внутри цикла while.

0

Попробуйте следующее:

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>; ,

0

Привет, вы использовали обычную переменную. Когда цикл продолжается, старые данные будут заменены вашим новым сообщением. Поэтому либо вы можете сделать

$data='';
while($portfolio_query -> have_posts() ){
 $data.= '
        <div id="all-content" class="container abs-position">

код останова будет таким же.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню