2009-02-20 36 views
8

Dường như có ba cách chính để xuất nội dung ra khỏi Wordpress sử dụng các hàm built-in của nó, với WP_Query được khuyên dùng:Phương pháp tốt nhất để tạo vòng Wordpress của riêng bạn là gì?

gì khác nhau giữa chúng là gì? (Tôi hiểu rằng WP_Query là lớp học và hai loại kia là các phương pháp).

Cách sạch nhất để có nhiều vòng lặp trên cùng một trang, không có bất kỳ sự cố nào trong số chúng gây trở ngại cho nhau?

Tôi đang tìm các ví dụ về cách bạn lập trình các vòng WP của mình; ví dụ: đầu ra 2 riêng biệt bài danh sách theo thể loại, với file đính kèm, dữ liệu meta, vv

Đây là tài liệu tham khảo tốt nhất mà tôi tìm thấy cho đến nay:

Trả lời

5

Tôi đã sử dụng cả WP_Query và get_posts. Trên một trong các mẫu thanh bên của tôi, tôi sử dụng vòng lặp sau đây để hiển thị các bài đăng từ một danh mục cụ thể bằng cách sử dụng các trường tùy chỉnh có khóa 'category_to_load' có chứa tên danh mục hoặc slug. Sự khác biệt thực sự đến trong việc thực hiện một trong hai phương pháp.

Phương pháp get_posts trông giống như vậy trong một số mẫu của tôi:

Trường hợp thực hiện WP_Query trông như thế này:

$blog_posts = new WP_Query('showposts=15'); 

while ($blog_posts->have_posts()) : $blog_posts->the_post(); ?> 

      <div <?php post_class() ?> id="post-<?php the_ID(); ?>" class="blog_post"> 
       <div class="title"> 
        <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2> 
        <span class="date"><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></span> 
       </div> 
       <div class="entry"> 
        <?php the_content(); ?> 
       </div> 
       <p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?></p> 
      </div> 

     <?php endwhile; ?> 

Sự khác biệt chính là rằng bạn không cần phải thiết lập lại biến $ post toàn cục và bạn cũng không phải thiết lập dữ liệu bài đăng bằng cách gọi setup_postdata ($ post) trên mỗi đối tượng bài đăng khi bạn sử dụng WP_query. Bạn cũng có thể sử dụng hàm has_posts() đáng yêu trên hàm WP_Query, mà không có sẵn bằng cách sử dụng get_posts().

Bạn không nên sử dụng hàm query_posts() trừ khi bạn thực sự có ý nghĩa bởi vì nó sửa đổi vòng lặp chính cho trang. Xem docs. Vì vậy, nếu bạn đang xây dựng một trang đặc biệt để hiển thị blog của mình, thì việc gọi query_posts có thể làm hỏng vòng lặp của trang, vì vậy bạn nên sử dụng WP_Query.

Đó chỉ là hai xu của tôi. Đề xuất cuối cùng của tôi, lựa chọn đầu tiên của bạn nên là WP_Query.

-Chris

+0

Làm thế nào bạn sẽ truy cập vào bài trẻ em (file đính kèm, sửa đổi vv). Đây có phải là một truy vấn riêng biệt không? – meleyal

+0

bạn có thể sử dụng hàm get_children(): http://codex.wordpress.org/Function_Reference/get_children. HOẶC Bạn có thể sử dụng wp_list_pages - wp_list_pages ('title_li = & child_of ='. $ Post-> ID. '& Show_date = sửa đổi & date_format = $ date_format'); ?>: http://codex.wordpress.org/wp_list_pages nếu bạn muốn danh sách. -C –

3

Từ các tài liệu WP cho get_posts:

get_posts() cũng có thể lấy các tham số query_posts() vì cả hai hàm bây giờ sử dụng cùng một mã truy vấn cơ sở dữ liệu nội bộ.

Sự khác biệt duy nhất giữa hai hàm là get_posts trả về một mảng có bản ghi bài, trong khi query_posts lưu trữ bản ghi trong đối tượng truy vấn để truy xuất bằng hàm mẫu (has_posts, the_post, v.v.).

Cả hai đều sử dụng đối tượng WP_Query để thực thi truy vấn.

Tạo vòng lặp thứ hai được bao phủ trong Wordpress docs. Có một số liên kết ở đó cho các ví dụ khác về nhiều vòng lặp. Bạn sẽ nhận thấy rằng mọi người làm điều đó một cách khác nhau, nhưng tất cả họ đều hài lòng với kết quả của họ.

1

WP sử dụng đối tượng được gọi là $wp_query cho vòng lặp chính. Chúng ta thường không nhìn thấy đối tượng này vì nó ẩn đằng sau have_posts()the_post() mà chỉ là giấy gói cho $wp_query->have_posts()$wp_query->the_post()

Nếu bạn muốn thay đổi vòng lặp chính bạn nên sử dụng query_posts() trước khi vòng lặp.

Nếu bạn muốn một vòng lặp khác, bạn có thể sử dụng lại đối tượng $wp_query bằng cách sử dụng query_posts() trước vòng lặp mới đó. Điều này có thể được thực hiện nhiều lần nếu cần.

Nếu vì một lý do nào đó bạn cần giữ đối tượng $ wp_query quanh THEN bạn nên sử dụng WP_Query. Và tất nhiên, vì have_posts()the_post() là trình bao bọc cho đối tượng $wp_query bạn không thể sử dụng chúng với WP_Query. Bạn chứ không nên sử dụng $your_query_obj->have_posts() ví dụ:

$sidebar= WP_Query('category_name= sidebar'); 

while($sidebar->have_posts()): $sidebar->the_post(); 
    the_title(); 
    the_content(); 
endwhile; 

Một trường hợp tốt nơi WP_Query có thể là tốt hơn so với query_posts() là một thanh bên trái. Khi vòng lặp mã cho thanh bên có thể sẽ được đặt trên đầu vòng lặp chính, một cuộc gọi query_posts() sẽ thay đổi đối tượng $wp_query và cũng thay đổi vòng lặp chính. Trong trường hợp này để sử dụng query_posts() ở mã thanh bên, bạn cũng sẽ cần sử dụng query_posts() trước vòng lặp chính để truy vấn nội dung thích hợp cho vòng lặp đó.

Vì vậy, việc sử dụng WP_Query cho trường hợp này sẽ giữ $ wp_query và do đó vòng lặp chính bị ảnh hưởng.

Nhưng một lần nữa, đối với một trường hợp phổ biến kịch bản query_posts() là một cách đẹp để truy vấn nội dung của bạn:

query_posts('category_name=blog'); 

while(have_posts()): the_post(); 
    the_title(); 
    the_content(); 
endwhile; 
Các vấn đề liên quan