Nhận biết Custom Post Type trong WordPress
Câu hỏi:
Tôi đang tìm cách kiểm tra xem một post có phải là dạng custom post type không. Ví dụ, ở sidebar (thanh bên) tôi có thể chạy code như thế này:
if ( is_single() ) {
// code here
}
Tôi muốn biết code dùng để kiểm tra dành riêng cho custom post type. Rất mong sự giúp đỡ của các bạn!
Adam Thompson
Câu trả lời chính xác nhất
Của bạn đây: get_post_type() và sau đó if ( ‘book’ == get_post_type() ) … theo Conditional Tags > A Post Type trong Codex.
Câu trả lời của Szymon Skulimowski
is_singular() gọn nhẹ hơn một chút Conditional Tags > A Single Page, Single Post or Attachment – Rarst
if ( is_singular( ‘book’ ) ) {
// conditional content/code
}
Code trên cho giá trị true khi đó là một post loại custom post type: book.
if ( is_singular( array( ‘newspaper’, ‘book’ ) ) ) {
// conditional content/code
}
Code trên trả về giá trị true khi post đó là loại custom post types: newspaper or book.
Hãy xem thêm conditional tags (thẻ có điều kiện) ở đây.
Câu trả lời của Mark Rummel
Dành cho những ai đang tìm cái này, thêm nó vào functions.php của bạn và bạn có thể có tính năng này, trong và ngoài vòng lặp:
function is_post_type($type){
global $wp_query;
if($type == get_post_type($wp_query->post->ID)) return true;
return false;
}
Sau đó bạn có thể dùng code dưới đây:
if (is_single() && is_post_type(‘post_type’)){
//work magic
}
Câu trả lời của Mild Fuzz
Cảm ơn bạn, cái này rất hữu ích! Nhưng nó đáng nhẽ là: if (is_single() && is_post_type(‘post_type’)){ //work magic } Bạn bị thiếu đóng ngoặc ở cuối cùng… Rất vui được làm quen, Ethel – user10462
Có phải cái này đã dừng hoạt động không? Tôi có dùng nó đã lâu, nhưng đột nhiên nó dừng hoạt động với tôi. Tuy nhiên, khi tôi dùng phương pháp tương tự mà không có global $wp_query thì nó lại hoạt động bình thường: if ( ‘post-type’ == get_post_type() ) {} – turtledropbomb
is_post_type() bị giảm giá trị. – Lisa Cerilli
Để kiểm trả liệu một post có phải là custom post type, nạp danh sách tất cả các loại bài đăng không được tích hợp sẵn (not built-in post types) và kiểm tra xem loại của bài đăng có nằm trong danh sách đó hay không.
Hàm như sau:
/**
* Check if a post is a custom post type.
* @param mixed $post Post object or ID
* @return boolean
*/
function is_custom_post_type( $post = NULL )
{
$all_custom_post_types = get_post_types( array ( ‘_builtin’ => FALSE ) );
// there are no custom post types
if ( empty ( $all_custom_post_types ) )
return FALSE;
$custom_types = array_keys( $all_custom_post_types );
$current_post_type = get_post_type( $post );
// could not detect current type
if ( ! $current_post_type )
return FALSE;
return in_array( $current_post_type, $custom_types );
}
Cách dùng:
if ( is_custom_post_type() )
print ‘This is a custom post type!’;
Câu trả lời của fuxia
Đây nên là câu trả lời được chấp nhận. – aalaap
Nếu vì một vài lý do nào đó mà bạn đã truy cập vào biến toàn cục (global variable) $post rồi thì đơn giản bạn có thể dùng:
if ($post->post_type == “your desired post type”) {
}
Câu trả lời của ino
Nếu bạn muốn kiểm tra theo kiểu wild card cho tất cả các custom post type của bạn:
if( ! is_singular( array(‘page’, ‘attachment’, ‘post’) ) ){
// echo ‘Imma custom post type!’;
}
Nếu làm theo cách này bạn không cần biết tên custom post của bạn. Hơn nữa, code vẫn hoạt động thậm chí nếu sau đó bạn thay đổi tên custom post của bạn.
Câu trả lời của kosinix