Có vẻ như câu hỏi ngu ngốc. Nhưng, tôi không thể tìm ra nó :(.
Tôi cần hiển thị nút ở nhà để đi tới URL lưu trữ của post_type tùy chỉnh (archive- {post_type} .php). Làm thế nào để làm điều đó?
Có vẻ như câu hỏi ngu ngốc. Nhưng, tôi không thể tìm ra nó :(.
Tôi cần hiển thị nút ở nhà để đi tới URL lưu trữ của post_type tùy chỉnh (archive- {post_type} .php). Làm thế nào để làm điều đó?
Câu trả lời:
Xin chào @Silent:
Hóa ra có một chức năng trong WordPress 3.1 thực hiện chính xác những gì bạn muốn và nó được đặt tên get_post_type_archive_link()
; đây là cách bạn gọi nó (giả sử một loại bài đăng tùy chỉnh có tên 'product'
):
<a href="<?php echo get_post_type_archive_link('product'); ?>">Products</a>
Dưới đây là câu trả lời trước của tôi trước khi tôi phát hiện ra rằng WordPress thực sự có một chức năng tích hợp cho trường hợp sử dụng này.
Trừ khi tôi bỏ qua một cái gì đó trong mã nguồn cốt lõi cho WordPress 3.1 Tôi nghĩ rằng bạn đang tìm kiếm một chức năng get_archive_link()
mà bạn có thể gọi như thế này (giả sử loại bài đăng tùy chỉnh có tên 'product'
):
<a href="<?php echo get_archive_link('product'); ?>">Products</a>
Và đây là mã nguồn mà bạn có thể đặt vào function.php
tệp của chủ đề hoặc trong .php
tệp cho một plugin bạn có thể đang viết:
if (!function_exists('get_archive_link')) {
function get_archive_link( $post_type ) {
global $wp_post_types;
$archive_link = false;
if (isset($wp_post_types[$post_type])) {
$wp_post_type = $wp_post_types[$post_type];
if ($wp_post_type->publicly_queryable)
if ($wp_post_type->has_archive && $wp_post_type->has_archive!==true)
$slug = $wp_post_type->has_archive;
else if (isset($wp_post_type->rewrite['slug']))
$slug = $wp_post_type->rewrite['slug'];
else
$slug = $post_type;
$archive_link = get_option( 'siteurl' ) . "/{$slug}/";
}
return apply_filters( 'archive_link', $archive_link, $post_type );
}
}
Tôi thực sự đã làm việc với logic chính xác này vào cuối tuần qua mặc dù tôi chưa chắc chắn 100% thứ tự logic là chính xác trong tất cả các trường hợp sử dụng mà WordPress có thể thấy mặc dù nó có thể sẽ hoạt động cho bất kỳ trang web cụ thể nào.
Đây cũng là một điều tuyệt vời để đề xuất được thêm vào WordPress thông qua trac mà tôi nghĩ rằng tôi sẽ làm vào tối nay.
Khi bạn đăng ký loại bài đăng, bạn có thể chuyển một chuỗi dưới dạng slug với tham số "has_archive" và đảm bảo bạn cũng đặt viết lại thành đúng hoặc một mảng nhưng không sai và sau đó URL lưu trữ CPT của bạn sẽ là http://www.YOURDOMAIN.com / has_archive_slug chẳng hạn
nếu bạn đặt trong register_post_type của bạn chẳng hạn:
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => 'product',
'capability_type' => 'post',
'has_archive' => 'products',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title','editor','author','thumbnail','excerpt','comments')
);
register_post_type('product',$args);
thì url duy nhất của bạn là: http://www.YOURDOMAIN.com/product/postName và url lưu trữ của bạn là: http://www.YOURDOMAIN.com/products/
has_archive
là một boolean, nhưng bây giờ tôi biết nó có thể được cung cấp một chuỗi, vì vậy loại bài tùy chỉnh số ít của tôi recipe
có thể có một sên số nhiều/recipes/
'rewrite'
chỉ chấp nhận giá trị boolean hoặc mảng. Thay vì 'rewrite' => 'product',
bạn đã liệt kê, thay vào đó nên được 'rewrite' => array( 'slug' => 'product' ),
.
yoursite.com/type-slug
trừ khi bạn đặt nó rõ ràng thành một cái gì đó khác, ví dụ.yoursite.com/some-other-url
..