Vũ Thành Lâm

Nhận biết Custom Post Type trong WordPress

5/5 - (1 bình chọn)

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

 

Exit mobile version