2010-10-03 35 views
10

Tôi muốn có một trang hiển thị tất cả các bài viết, cách nhau theo thể loại. Ý tưởng là để có được các loại, và sau đó lặp qua tất cả các bài viết cho mỗi thể loại. Vấn đề là phức tạp bởi thực tế là tôi muốn lặp qua tất cả các bài viết của một loại tùy chỉnh nhất định, sử dụng phân loại tùy chỉnh làm các danh mục. (Chạy Wordpress 3)Lặp lại thông qua loại bài đăng tùy chỉnh theo loại phân loại tùy chỉnh? (Sắp xếp các bài viết wordpress theo thể loại, hoặc hiển thị loại bài tùy chỉnh theo thuật ngữ phân loại)

Trong functions.php của tôi, loại bài đăng tùy chỉnh của tôi được đăng ký là "video" và phân loại tùy chỉnh là "video_types".

Trong mẫu trang tùy chỉnh của tôi đó là nghĩa vụ để hiển thị tất cả các video được sắp xếp theo thể loại, đây là đoạn code mà không được trả lại bất kỳ bài viết (và họ đang ở đó, tôi đã kiểm tra):

<?php 
    $categories = get_categories(array(
    'taxonomy' => 'video_types' 
)); 
    foreach ($categories as $cat): 
?> 
<section id="<?php $cat->slug ?>" class="video-category"> 
    <?php 
    query_posts(array(
     'cat' => $cat->cat_ID, 
     'posts_per_page' => -1 
     )); 
    ?> 
    <h2><?php single_cat_title(); ?></h2> 
    <p class="description"><?php echo category_description($cat->cat_ID); ?></p> 
    <?php while (have_posts()) : the_post(); ?> 
     <?php 
     $category = get_the_category(); 
      echo $category[0]->cat_name; 
     ?> 
     <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>> 
     <article class="video"> 
     <h3><?php the_title(); ?></h3> 
     <p> 
      <?php the_content() ?> 
     </p> 
     </article> 
    <?php endwhile; ?> 
</section> 
<?php endforeach; ?> 

Trả lời

15

Jeez, một khi bạn phát hiện ra rằng mỗi mục của phân loại tùy chỉnh được gọi là một thuật ngữ (không rõ ràng ngay trong tài liệu wordpress cho noob), nó đơn giản hơn rất nhiều để tìm kiếm. Giải pháp này dễ hiểu hơn nếu không có tất cả các công cụ truy vấn tùy chỉnh.

<?php 
// A term is an item of a taxonomy (e.g. "Promotional" could be a term for the taxonomy "video_type") 
// ...so $categories could be $terms and it would still make sense 
$categories = get_terms('taxonomy_name'); 
foreach($categories as $category): 
?> 
    <section class="category-<?php echo $category ?>"> 
    <h2><?php echo $category->name; // Print the cat title ?></h2> 
    <p class="description"><?php echo $category->description ?></p> 
    <div class="<?php echo $category->post_type ?>-list"> 
     <?php 
     //select posts in this category (term), and of a specified content type (post type) 
     $posts = get_posts(array(
     'post_type' => 'custom_post_type_name', 
     'taxonomy' => $category->taxonomy, 
     'term' => $category->slug, 
     'nopaging' => true, // to show all posts in this category, could also use 'numberposts' => -1 instead 
    )); 
     foreach($posts as $post): // begin cycle through posts of this category 
     setup_postdata($post); //set up post data for use in the loop (enables the_title(), etc without specifying a post ID) 
     ?> 
     // Now you can do things with the post and display it, like so 
     <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> 
      <h3><?php the_title(); ?></h3> 
      <?php 
      // Getting custom field data example 
      echo get_post_meta($post->ID, 'field_key', true); 
      ?> 
      <?php the_content() ?> 
     </article> 
     <?php endforeach; ?> 
    </div> 
    </section> 
<?php endforeach; ?> 

Và sau đó mọi khoảng trống trong sự hiểu biết có thể được lấp đầy bằng cách tìm kiếm các chức năng ở trên trong codex wordpress. Trong đoạn mã trên, đối với ứng dụng cụ thể của tôi, custom_post_type_name sẽ là video và tên phân loại sẽ là video_type (hoặc video_types, tôi quên).

+0

Tôi luôn quên điều này. – emc

+0

Cảm ơn lời khuyên. Vài lỗi chính tả cho những người sử dụng điều này như một hướng dẫn. Một đến nhiều dấu ngoặc đơn trong lệnh gọi get_terms ban đầu. Ngoài ra, lớp phần thể loại không nên sử dụng đối tượng đầy đủ, nhưng tên đối tượng danh mục. Khác hơn thế, rất đẹp! –

+0

@PaulT Điều đó có nghĩa gì về tên đối tượng danh mục? Bạn có thể cung cấp đoạn mã không? (Tốt bắt trên đó typo khác, btw). – Diogenes

2

Bạn có thể thử một cách tiếp cận khác. Hãy thử sử dụng get_posts để nhận bài đăng của bạn được sắp xếp theo phân loại tùy chỉnh của bạn, thiết lập biến ban đầu là chuỗi rỗng (được gọi là $ current_cat hoặc gì đó) và với mỗi vòng kết quả, kiểm tra phân loại và so sánh nó với $ current_cat - if khác nhau, in ra một tiêu đề cho các thể loại mới và sau đó các mục, nếu như nhau, in ra một mục như bình thường.

Một vấn đề rõ ràng với mã của bạn (tôi tin) là bạn không truy vấn đúng cách phân loại tùy chỉnh của mình. Bạn chỉ nên sử dụng đơn giản taxonomy_name => 'value' trong truy vấn của mình, phân loại tùy chỉnh sẽ không bị chạm vào bởi truy vấn cat.

Hãy cho tôi biết nếu bạn cần thêm chi tiết.

chỉnh sửa: Chi tiết hơn!

// get a list of categories, in this case your custom taxonomy (your_taxonomy_name) 
$querystr = "SELECT terms.* FROM $wpdb->term_taxonomy tax LEFT JOIN $wpdb->terms terms ON tax.term_id = terms.term_id WHERE tax.taxonomy = 'your_taxonomy_name'"; 

$categories = $wpdb->get_results($querystr, OBJECT); 

foreach($categories as $category): // begin a loop through those terms (categories in your custom taxonomy) 
    echo '<div class="category-header"><h3>'.$category->name.'</h3>'; // print the cat title 
    echo '<p class="category-description">'.strip_tags(term_description($category->term_id,'your_taxonomy_name')).'</p></div>'; // cat description 

    $posts = get_posts(array('your_taxonomy_name' => $category->name, 'post_type' => 'your_post_type')) //select posts in this category, and of a specified content type 
    foreach($posts as $post) : // begin cycle through posts of this category 
     setup_postdata($post); //set up post data for use in the loop (enables the_title(), etc without specifying a post ID) 

     [ ... ] // do things with your post (display it) 

    endforeach; 

endforeach; 

Điều đó nên thực hiện - và this có thể hữu ích khi sử dụng get_posts.

+0

Xin chào, xin cảm ơn câu trả lời. Bạn có thể giải thích phương pháp của bạn nhiều hơn một chút không? Cụ thể là phần đầu tiên về việc sử dụng các bài đăng. – Diogenes

+0

Ồ, và tôi nên lưu ý rằng lý do tôi muốn nhận danh mục trước tiên là vì tôi cần mô tả của họ cho trang, ý tưởng là có tên danh mục, mô tả và sau đó tất cả các video (post_type => 'video') trong danh mục đó (hoặc "video_type") cho mọi loại video. – Diogenes

+0

Hoàn toàn có thể thực hiện được - chỉnh sửa câu trả lời ở trên bằng một số mã. – Gavin

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