2017-03-30 16 views
8

Tôi đang sử dụng Trường tùy chỉnh nâng cao (ACF) để lấy thông tin lặp lại từ trang sự kiện và hiển thị danh sách rút gọn các sự kiện trên trang chủ.Trường tùy chỉnh nâng cao hiển thị ba hàng lặp lại cuối cùng

Tôi đã thiết lập bộ lặp để cho phép người dùng nhập vào tháng mà sự kiện sẽ diễn ra trong (Cho phép họ đặt trong nhiều tháng sự kiện), sau đó lặp lại để cho phép họ thêm nhiều sự kiện cho tháng đã cho. Ví dụ dưới đây:

tháng

  • sự kiện ngày 09 tháng ba
  • 12 tháng 3 sự kiện
  • 28 tháng 3 sự kiện

Tháng Tư

  • sự kiện ngày 01 tháng tư
  • Sự kiện 28 tháng 4

Đây là đầu ra hiện tại trên trang sự kiện và hoạt động như dự định.

Trên trang chủ của trang web, tôi cần phải kéo 3 sự kiện mới nhất (sự kiện ở cuối danh sách là sự kiện mới nhất) và hiển thị chúng trên trang chủ.

Tôi không gặp sự cố khi kéo và hiển thị các sự kiện trên trang chủ. Những gì tôi đang gặp vấn đề là hiển thị các sự kiện khi ba sự kiện cuối cùng (bộ lặp con) qua lại giữa các tháng (bộ lặp gốc).

Chỉ cần giới hạn đầu ra sự kiện bằng cách sử dụng vòng lặp php trên if, trong khi, câu lệnh chỉ giới hạn số lần kết quả sự kiện trong tháng đó. Mã của tôi hiện đang sử dụng trên trang chủ, bên dưới.

<?php if(have_rows('event_month', 1263)): ?> 
<ul> 
    <?php while (have_rows('event_month', 1263)) : the_row(); ?> 
     <?php if(have_rows('event', 1263)):; ?> 
      <?php while (have_rows('event', 1263)) : the_row(); ?> 
       <li> 
        <h3> 
         <a href="<?php echo esc_url(home_url('/')); ?>events/"><?php $summary = get_sub_field('event_title'); 
          echo substr($summary, 0, 34),'...'; ?></a> 
          <span><?php the_sub_field('event_day_of_week');?>, <?php the_sub_field('event_sub_month');?> <?php the_sub_field('event_day');?></span> 
        </h3> 
       </li> 
      <?php endwhile; ?> 
     <?php else: ?> 
      <p>Show dates to be announced soon.</p><?php the_sub_field('event_title'); ?> 
     <?php endif; ?> 
    <?php endwhile; ?> 
</ul> 

gì đầu ra mong muốn của tôi trên trang chủ sẽ như thế nào nếu chúng ta nắm bắt được ba sự kiện mới nhất:

  • sự kiện ngày 28 tháng 3
  • sự kiện ngày 01 tháng 4
  • tháng tư sự kiện 28
+0

Bất kỳ lý do gì để không chỉ sử dụng một bộ lặp đơn với trường Nhập ngày? Sau đó, bạn có thể trích xuất tháng từ nó để chơi độc đáo với mã của bạn ở nơi khác trên trang web và nó sẽ sắp xếp các mục nhập gần đây nhất trên trang chủ một cách nhanh chóng. – Leland

+0

@Leland - Tôi đánh giá cao việc bạn hỏi vì đó là điều tôi chưa từng cân nhắc. Đây là một liên kết đến trang hiển thị các sự kiện bên trong mỗi tháng. http://ardentsolutionsllc.com/events/ Nếu tôi chỉ sử dụng một bộ lặp, tôi sẽ không biết cách liên kết các sự kiện với mỗi tháng. Trang chủ hiển thị danh sách các sự kiện (dưới cùng bên phải) mà tôi đang cố gắng rút ngắn, chỉ hiển thị 3 trong số các sự kiện mới nhất, thường xuất hiện ở cuối mỗi tháng trên trang sự kiện. –

+0

OK, tôi đang đọc lại bài đăng của bạn - bạn muốn, trên trang chủ, 3 sự kiện được thêm gần đây nhất *? Mà là để nói, bạn muốn trên trang chủ của 3 sự kiện được tạo ra gần đây nhất trong quản trị WordPress? Hay bạn muốn có 3 sự kiện xảy ra sớm nhất cho đến hôm nay? – Leland

Trả lời

0

điều này có thể không phải là câu trả lời mà mọi người đang tìm kiếm một ngày này, nhưng ở đây là những gì tôi đã làm như một công việc xung quanh, mà làm việc đủ tốt cho tôi.

Tôi đã quyết định giải quyết vấn đề bên ngoài php, sử dụng css để chọn ba mục danh sách cuối cùng. Đây là những gì tôi đã sử dụng, làm việc tuyệt vời.

.connect-list-wrapper ul li 
{ 
    display: none; 
} 
.connect-list-wrapper ul li:nth-last-child(-n+3) 
{ 
    display: block; 
} 
1

Có lẽ bạn nên sử dụng for thay vì while. Và xem xét các thuật toán sau đây:

1) Lấy last row from event_month

2) Đếm số sự kiện trong tháng đó

3) Nếu số lượng các sự kiện hơn hoặc bằng 3.

    3.1) Nhận được 3 sự kiện cuối cùng và hiển thị chúng

4) Else đếm số lượng các sự kiện không thay (3-<<events in last month>>)

    4,1) Bây giờ có được hàng cuối cùng thứ hai và lặp lại bước 2,3,4

vì vậy, sử dụng logic trên mã của bạn sẽ giống như:

<?php 

function getEvents($rows, $noOfEvents){ 
    $resultArray = array(); 
    if($rows && count($rows > 0)) { 
     $events = $rows[count($rows)-1]['event']; 
     $events = is_array($events) ? $events : array(); 
     $eventCount = count($events); 
     if($eventCount < $noOfEvents){ 
      $noOfOtherEvents = $noOfEvents-$eventCount; 
      array_pop($rows); 
      $iterate = getEvents($rows,$noOfOtherEvents); 
      $resultArray = array_merge($events,$iterate);  
     } 
     else{ 
      $resultArray = array_slice($rows, 0-$eventCount, $eventCount); 
     } 
     return $resultArray; 
} 

$rows = get_field('event_month', 1263); 
if($rows) { 
    $requiredEvents = getEvents($rows,3);  //3 or how many ever last you want 
    foreach($requiredEvents as $event){ 
     var_dump($event); //this should have all you need like $event['event_title'],$event['event_day'],ect... 
    } 
} 
+0

Cảm ơn câu trả lời của bạn. Tôi đã thử triển khai mã của bạn vào trang web, nhưng nó đã phá vỡ trang nói rằng $ requiredEvents => $ event tạo ra lỗi cú pháp 'unexpected' => '(T_DOUBLE_ARROW)'. Tôi không biết PHP đủ tốt để giải quyết vấn đề đó. Tôi có thể đào sâu vào nó, nhưng nghĩ rằng bạn có thể đưa ra lời khuyên bổ sung. –

+0

@GordonSmith là một lỗi đánh máy '=>' nên là 'as' tham khảo chỉnh sửa! Và bạn cần phải cải thiện kỹ năng php của bạn! –

+0

Cảm ơn bạn đã chỉnh sửa. Tôi đồng ý và đang tiếp tục cải thiện hàng ngày. Tôi sẽ cung cấp cho một shot và báo cáo lại. –

Các vấn đề liên quan