Hôm nay tôi sẽ chia sẽ với anh chị bài viết “Thuật toán bài viết liên quan trong wordpress”
Tôi sẽ diễn dải cách làm như sau, khi anh chị đang đọc một bài viết hiện tại, thì điều đường nhiên nó phải thuộc một 1 hoặc nhiều category đúng không nào. Rồi sau đó anh chị phải đi tìm category cha của những category này, tiếp theo khi anh chị đã có được id cha, thì chúng ta sẽ tiến hành truy tìm id category con của những id category cha trên. Sau khi đã có được những điều trên anh chị sẽ gọp lại và có được list id category liên quan của bài viết đúng không nào và có được điều này thì anh chị dễ dang truy vấn ra các bài viết từ các id category liên quan này. Sau đây tôi sẽ gửi đến anh chị code để áp dụng
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
<?php global $post; //Lấy list id category hiện tại của bài viết, kết quả trả về sẽ là object $term_currents_object= get_the_terms( $post->ID, "category" ); $term_currents_array = array(); $term_relates = array(); //dùng vòng lặp foreach để lấy list id category hiện tại, đồng thời dùng get_ancestors để lấy id category cha, dùng array_merge để gọp các id category cha thành một mảng, dùng array_push để tạo một mảng id category hiện tại từ object id category hiện tại foreach ( $term_currents_object as $term_current ): $term_relates = array_merge($term_relates,get_ancestors($term_current->term_id,'category')); array_push($term_currents_array,$term_current->term_id); endforeach; $child_relate_terms = array(); //dùng vòng lặp foreach để duyệt qua list id category cha, qua đó dùng get_term_children đẻ lấy list id category con, đồng thời dùng array_merge để gọp chúng thành một mảng các id category con foreach ($term_relates as $term_relate ): $child_relate_terms= array_merge($child_relate_terms,get_term_children($term_relate,'category')); endforeach; //dùng array_merge để gọp mảng id category con, id category cha, id cateogry hiện tại và chúng ta sẽ có được list id category liên quan $list_id_term_relate = array_merge($child_relate_terms,get_ancestors($term_current->term_id,'category'),$term_currents_array ); //Truy vấn bài viết liên quan $args = array( 'post_type' => 'post', 'post__not_in' => array($post->ID), 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'term_id', 'terms' => $list_id_term_relate ) ), 'posts_per_page' => 6, ); $related_posts = new WP_Query( $args ); if ( $related_posts->have_posts() ) : while ( $related_posts->have_posts() ) : $related_posts->the_post(); ?> Hien thi bai viet o day <?php endwhile; wp_reset_postdata(); endif; ?> |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress