Đầu tiên, chúng tôi tạo một truy vấn tùy chỉnh mới chứa tất cả các loại bài đăng đã xuất bản $post_type
mà bạn chuyển cho hàm. Nếu bạn không chỉ muốn các bài đăng đã xuất bản, bạn có thể chọn và chọn trạng thái 'mà bạn yêu cầu - hãy xem phần này của WP_Query Codex .
Tiếp theo, chúng tôi sử dụng The Loop để lặp lại các bài đăng kết quả và cho mỗi lần kiểm tra xem tên bài đăng có tồn tại dưới dạng một thuật ngữ trong $ taxonomy (mà bạn cũng chuyển cho hàm) bằng cách sử dụng term_exists()
hay không, và nếu không, chúng tôi thêm nó bằng cách sử dụng wp_insert_term()
. Sử dụng điều này có nghĩa là chúng ta chỉ phải chuyển tên và mô tả, trong khi slug sẽ được tạo tự động dựa trên tên.
Cuối cùng, ngay trước khi thoát khỏi The Loop , chúng tôi đặt lại toàn cục $post
bằng cách sử dụngwp_reset_postdata()
Đặt toàn bộ khối mã này vào functions.php theo thứ tự ở đây. Mặc dù bạn chỉ có thể để mã này chạy trên mỗi lần tải trang (tên danh mục trùng lặp sẽ không được tạo), nó được khuyến nghị vì lý do lâu dài và bạn nên đảm bảo rằng bạn nhận xét lệnh gọi add_action()
khi bạn hoàn thành.
add_action('init', 'init_make_taxonomy_from_posts');
function init_make_taxonomy_from_posts(){
make_taxonomy_from_posts('jjm_authors', 'jjm_author_tax');
}
/**
* Create slugs/terms in jjm_author_tax taxonomy for all jjm_authors posts
*/
function make_taxonomy_from_posts($post_type, $taxonomy){
/** Grab the relevant posts */
$args = array(
'post_status' => 'publish',
'post_type' => $post_type,
'posts_per_page' => -1
);
$my_query = new WP_Query($args);
/** Check that some posts were found and loop through them */
if($my_query->have_posts()) : while($my_query->have_posts()) : $my_query->the_post();
/** Check to see if a term with the same title as the post currently exists in $taxonomy */
if(!term_exists(get_the_title(), $taxonomy)) : // It doesn't
/** Add a new term to $taxonomy */
$args = array(
'description' => get_the_content()
);
wp_insert_term(get_the_title(), $taxonomy);
endif;
endwhile;
/** Reset the '$post' global */
wp_reset_postdata();
endif;
}
Ghi chú
Mã này đã được kiểm tra và hoạt động 100% .