Lưu trữ loại bài đăng tùy chỉnh theo năm và tháng?


17

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?


Giải pháp của tôi dưới đây hoạt động nếu bạn đang sử dụng <WP 4.4, nhưng kể từ khi phát hành WP 4.4, wp_get_archives () FINALLY hỗ trợ các loại bài đăng tùy chỉnh: developer.wordpress.org/reference/fifts/wp_get_archives
Trevor

Câu trả lời:


17

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_typetham 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>';

3
Bạn đã thử giải pháp này? Nó tìm nạp chính xác danh sách các tháng với một bài đăng từ CPT của bạn và số lượng bài đăng, nhưng các liên kết là vô ích. Nhấp vào chúng sẽ đưa bạn đến tháng cho toàn bộ trang web, không phải cho CPT.
jerclarke

Sau khi đào bới (xem câu trả lời của Tom Nowell bên dưới), tôi đã từ bỏ lưu trữ hàng tháng cho các loại bài đăng tùy chỉnh. Thay vào đó, tôi đã sử dụng một danh mục bài đăng và thay đổi cấu trúc permalink của mình thành /%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.
Kevin C.

Câu hỏi về điều này. Điều này tạo ra các url như: mysite.com/2013/04như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?
gaoshan88

2
Thậm chí tốt hơn, cuối cùng cũng có plugin để xử lý chức năng còn thiếu này trong WordPress. Nó được tạo ra bởi một người đóng góp cốt lõi đang cố gắng khắc phục vấn đề này trong lõi. Plugin được cung cấp để giúp chúng tôi vượt qua cho đến khi vấn đề được giải quyết đúng đắn trong cốt lõi. wordpress.org/plugins/archives-for-custom-post-types
Trevor

6

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.


Có vẻ hơi kỳ lạ là họ sẽ chỉ đi xa hơn với chức năng này. Bạn có thể cho tôi một ví dụ về cách sử dụng bài viết tùy chỉnh?
Dan Lee

Bài viết tùy chỉnh nên được sử dụng cho mọi nội dung không thuộc phạm vi của các trang và bài đăng trên blog (hoặc bài đăng trên blog có tên khác nhưng hoạt động giống nhau, ví dụ: bài viết / tin tức / nhật ký / v.v.) Ví dụ về cách sử dụng đúng bài đăng tùy chỉnh bao gồm : sự kiện, thực đơn, địa điểm, biểu mẫu, nhật ký, v.v.
Tom J Nowell

Các bài đăng tùy chỉnh về cơ bản là phương tiện sản xuất các ứng dụng web, chúng không phải là phương tiện sao chép menu bài đăng trong phần phụ trợ để chỉnh sửa dễ dàng hơn (và việc sử dụng như vậy sẽ khiến wordpress chậm hơn nhiều và là một nhiệm vụ nhiều hơn bạn nghĩ)
Tom J Nowell

1
UUUUUgh. Đây là câu trả lời chính xác cho câu hỏi một cách bi thảm. Tôi không thể tin rằng lời giải thích ở trên dựa trên "chúng ta không nên có URL ngày cho CPT", gần như chắc chắn "URL ngày cho CPT quá phức tạp" đang dẫn đến quyết định thực tế không thực hiện. RAR RÀNG có những trường hợp mọi người muốn lưu trữ ngày cho một loại bài đăng tùy chỉnh, bạn không thể làm cho mong muốn rõ ràng đó biến mất bằng cách chỉ ra các định dạng bài đăng.
jerclarke

1
Tôi phải hoàn toàn không đồng ý. Các loại bài đăng tùy chỉnh được sử dụng cho bất cứ điều gì bạn muốn chúng được sử dụng cho, không có nơi nào trong Codex nói rằng chúng dành cho "ứng dụng web". Ngoài ra, bạn rất có thể cần một phần "tin tức" có phân loại tùy chỉnh riêng và bạn muốn lưu trữ cho những mục đó. Hoặc thậm chí loại "sự kiện" được đề xuất, mà tôi đồng ý là một cách sử dụng hoàn hảo cho CPT, nhưng một lần nữa những người dễ dàng có thể cần lưu trữ dựa trên ngày.
Trevor

5

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.


2

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);

1

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'));

Xem anh ấy là câu trả lời đầu tiên của bạn. Chỉ là một mẹo khi trả lời câu hỏi, đừng chỉ thêm mã hoặc cho các liên kết vấn đề đó. Mặc dù mã của bạn có thể hoạt động, nhưng thật tuyệt khi biết mã của bạn làm gì và tại sao nó nên hoạt động. Nếu không, câu trả lời của bạn được định dạng độc đáo. +1 cho điều đó
Pieter Goosen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.