- Trạng thái
- Đã giải quyết
- Loại
- Lỗi
- Được báo cáo cho
- WPML Multilingual CMS 3.3.6
- Đã giải quyết trong
- 3.3.7
Tổng quan về sự cố
Việc sử dụng wp_get_archives và chỉ định đối số post_type để lọc hiển thị các bài viết cho trang lưu trữ của một loại nội dung tùy chỉnh nhất định hiện không hoạt động.
Xin lưu ý rằng sự cố này đã xuất hiện từ phiên bản phát hành WordPress 4.4.
Ví dụ:
Giả sử có một loại nội dung tùy chỉnh với slug “news” và tạo một mẫu lưu trữ tùy chỉnh cho loại nội dung tùy chỉnh đó trong một giao diện (archive-news.php).
Trong tệp đó, bạn có thể sử dụng mã sau để hiển thị trang lưu trữ:
$my_archives=wp_get_archives(array( 'type'=>'alpha', 'show_post_count'=>true, 'limit'=>20, 'post_type'=>'news', 'format'=>'html' )); print_r($my_archives);
Hiện tại, mã này sẽ không hoạt động và sẽ không có bài viết nào được hiển thị.
Giải pháp tạm thời
Trước khi thực hiện bất kỳ bước nào sau đây, vui lòng đảm bảo bạn hiểu rằng mình đang chỉnh sửa các tệp trong trang web và điều này, nếu không được thực hiện đúng cách, có thể khiến trang web của bạn ngừng hoạt động.
Chúng tôi đặc biệt khuyên bạn nên thử điều này trong một môi trường an toàn trước, hoặc ít nhất là sao lưu toàn bộ trang web của bạn trước khi tiếp tục.
- Mở tệp
sitepress-multilingual-cms\sitepress.class.php - Đi tới dòng 219
- Thay thế:
add_filter( 'getarchives_join', array( $this, 'getarchives_join' ) );
- Bằng:
add_filter( 'getarchives_join', array( $this, 'getarchives_join' ), 10, 2 );
- Thay thế:
- Đi tới dòng 3685
- Thay thế:
function getarchives_join( $join ) { return $join . " JOIN {$this->wpdb->prefix}icl_translations t ON t.element_id = {$this->wpdb->posts}.ID AND t.element_type='post_post'"; } - Bằng:
function getarchives_join( $join, $args ) { $post_type = array_key_exists( 'post_type', $args ) ? $args['post_type'] : 'post'; $post_type = esc_sql( $post_type ); return $join . " JOIN {$this->wpdb->prefix}icl_translations t ON t.element_id = {$this->wpdb->posts}.ID AND t.element_type='post_" . $post_type . "'"; }
- Thay thế: