Làm cách nào để hiển thị tài liệu lưu trữ của Loại bài đăng tùy chỉnh theo năm và tháng?
Làm cách nào để hiển thị tài liệu lưu trữ của Loại bài đăng tùy chỉnh theo năm và tháng?
Câu trả lời:
Vâng, bạn có thể. Tất cả những gì bạn cần là tạo một bộ lọc wp_get_archives();
để nó chấp nhận post_type
tham số:
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
sau đó gọi đây:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
Bất cứ khi nào bạn muốn hiển thị lưu trữ theo loại bài đăng tùy chỉnh, chỉ cần vượt qua post_type args:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. Sau đó, có thể sử dụng một hook tương tự như trên, để sửa đổi các liên kết để bắt đầu /%category%/
thay vì chỉ ngày.
mysite.com/2013/04
nhưng điều này dẫn đến 404. Loại bài đăng tùy chỉnh có sẵn tại: mysite.com/cats
điều này khiến tôi nghĩ mysite.com/cats/2013/04
đó sẽ là liên kết nên là gì, nhưng điều này cũng giải quyết thành 404. Làm thế nào để bạn liên kết lưu trữ hoạt động?
Bạn không, dòng chính thức từ các nhà phát triển Wordpress là các loại bài đăng tùy chỉnh không có ý định thực hiện công việc của các bài đăng thông thường và nếu bạn cần lưu trữ bài đăng về ngày, v.v. thì bạn không làm việc chính xác, và bạn tốt hơn hết là sử dụng định dạng bài viết, v.v.
Các loại bài đăng tùy chỉnh được dành cho các ứng dụng web, v.v., trong khi thực hiện một số việc như thiết lập loại bài đăng tùy chỉnh hoạt động như một blog thứ cấp hoặc song song với một tên khác, ví dụ blog so với tin tức, với cùng khả năng, không phải là tính năng. dự định, và có nghĩa là các vấn đề kỹ thuật khác phát sinh từ việc thực hiện nó.
Nếu bạn vẫn khăng khăng về điều này và chỉ sử dụng các phân loại tùy chỉnh và định dạng bài đăng là không đủ, bạn có thể thêm quy tắc viết lại trong hàm.php và chuyển hướng lưu trữ năm / tháng trong một số URL nhất định vào trang lưu trữ bài đăng, sau đó kiểm tra tùy chỉnh trang lưu trữ bài đăng nếu bạn đã chỉ định các biến trong quy tắc viết lại của mình và tải một mẫu khác, đảm bảo trong quy tắc viết lại của bạn để đặt các giá trị phù hợp.
EDIT -> trong khi câu trả lời này vẫn hoạt động cho <WP4.4, vì hỗ trợ 4.4 cho các loại bài đăng tùy chỉnh hiện được bao gồm trongwp_get_archives()
Cuối cùng cũng có một giải pháp đơn giản, nhanh chóng và dễ dàng cho việc lưu trữ dựa trên ngày của các loại bài đăng tùy chỉnh trong WordPress! Đây là một vấn đề lâu dài được ghi lại ở đây trong WP Core Trac.
Nó vẫn chưa được giải quyết nhưng một trong những người đóng góp cho Trac đã đăng một plugin đơn giản trong GitHub cho phép bạn có tài liệu lưu trữ dựa trên ngày cho CPT.
Sau khi cài đặt plugin này hoặc thêm mã cho các chức năng của bạn theo cách thủ công, bạn có thể sử dụng tài liệu lưu trữ cho CPT như sau:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
Lưu ý hàm mới này hoạt wp_get_archives_cpt
động giống như tiêu chuẩn wp_get_archives
để bạn có thể sử dụng bất kỳ đối số thông thường nào mà nó chấp nhận. Tuy nhiên, nó chỉ đơn giản là thêm khả năng để bạn có thể thêm một đối số tên loại bài đăng tùy chỉnh.
Không đủ danh tiếng để thêm điều này vào câu trả lời của taiken.
Tuy nhiên muốn thêm rằng câu trả lời của anh ấy đã làm việc cho tôi, tuy nhiên các liên kết ở định dạng 'localhost / date / 2010'. Trong khi đó tôi cần định dạng 'localhost / postlug / 2010'. Tôi đã có thể khắc phục điều này bằng cách sử dụng chuỗi thay thế trên đầu ra của wp_get_archives.
Vì vậy, tùy thuộc vào cách đặt permalinks của bạn, mã này sẽ khắc phục sự cố 404 và chuyển hướng các liên kết đến cấu trúc permalink loại bài đăng tùy chỉnh:
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
Không thể thêm vào bài viết của takien vì vậy đây là những gì tôi đã phải làm:
Hàm.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
Gọi wp_get_archives ()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));