2016-08-09 2 views
0

У меня есть страница событий с календарем на боковой панели. Каждый раз, когда пользователь нажимает на дату, я загружаю все события с этой даты через конечную точку API, которую я создал. Пока все хорошо, но у меня проблема с разбиением на страницы. Если пользователь, только что введенный на страницу страницы событий, будет работать идеально, однако, когда пользователь попадает в календарь, чтобы загружать события через API, он разрушает разбиение на страницы и всегда возвращает next_post_link как номер страницы. Просто я тоже настроен в настройках что posts_per_page будет таким же, как пользовательский запрос, но это не поможет.Отображение страницы WordPress API возвращает только две страницы.

<?php 

function get_events(WP_REST_Request $request) 
{ 
    global $post; 
    $event_date = $request["event_date"]; 
    $paged = ($request["paged"]) ? $request["paged"] : 1; 
    $date = ''; 

    $args = array(
     'post_type'  => 'event', 
     'posts_per_page' => 3, 
     'paged'   => $paged, 
     'meta_key'  => 'event_date', 
     'meta_value'  => $event_date, 
     'meta_compare' => '>=', 
     'orderby'  => 'meta_value', 
     'order'   => 'ASC' 
    ); 
    $the_query = new WP_Query($args); 

    ob_start(); 

    include(locate_template('events_template.php')); 

    $events = ob_get_contents(); 
    ob_get_clean(); 
    return $events; 
} 

Событие шаблон:

<div class="posts-container"> 
    <?php if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?> 
     <div> 
      <?php 
       //Here we group events by event_date and add the date at the top. 
       $event_date = get_post_meta($post->ID, 'event_date', true); 
       if ($event_date != $date) 
       { 
        $event_date_formatted = date('l, F jS, Y', strtotime($event_date)); 
        echo "<p class='page-header'><strong>$event_date_formatted</strong></p>"; 
        $date = $event_date; 
       } 


      ?> 
      <div class="event ath-card"> 
       <h4><?php the_title(); ?></h4> 
       <p><?php echo get_post_meta($post->ID, 'event_location', true) ?></p> 
       <p><?php echo get_post_meta($post->ID, 'event_details', true) ?></p> 
      </div> 
     </div> 
    <?php endwhile; endif; ?> 
</div> 

<div class="loader text-center hidden"> 
    <i class="fa fa-spinner fa-pulse fa-3x fa-fw"></i> 
</div> 

<div class="div pagination-container text-center"> 
    <?php 
     //always returns page number 2. 
     //I run the exact query in the page itself and it works fine 
     next_posts_link('<button class="ath-btn ath-btn-info">LOAD MORE</button>', $the_query->max_num_pages); 
    ?> 
</div> 

ответ

0

Ну, я не мог решить эту проблему в нормальном режиме, но, к счастью

<?php $the_query->max_num_pages ?> 

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

Я добавил это:

if($paged < $the_query->max_num_pages) 
{ 
    $next_page = $paged + 1; 
} 
else 
{ 
    $next_page = null; 
} 

И это:

<?php if ($next_page) : ?> 
    <a href="http://localhost:8888/water/wp-json/events/v1/events/page/<?php echo $next_page ?>/?event_date=<?php echo $request["event_date"] ?> "> 
     <button class='ath-btn ath-btn-info'>LOAD MORE</button> 
    </a> 
<?php endif; ?> 
Смежные вопросы