has_post_format () so với get_post_format ()


10

Tôi mới bước vào khái niệm định dạng bài đăng và tự hỏi tại sao có hai trong số 3 chức năng từ định dạng bài đăng "API" cung cấp chức năng hoàn toàn giống nhau. Hãy xem xét hai khái niệm sau (A so với B):

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post();

        // A) has_post_format
        if ( has_post_format('format') )
        {
            the_excerpt(); // some special formating
        }

        // VERSUS:

        // B) 
        if ( get_post_format( $GLOBALS['post']->ID ) == 'format' )
        {
            the_excerpt(); // some special formating
        }

    } // endwhile;
} // endif;

Ai đó có thể vui lòng giải thích cho tôi tại sao có hai chức năng đó thay vì chỉ ex. get_post_format? Nếu bạn có thể cung cấp cho tôi một số ví dụ về các tình huống mà một người không có khả năng làm điều gì đó mà chức năng khác có thể làm, tôi sẽ rất vui và +1 nó.

Câu trả lời:


12

Biên tập

has_post_format()yêu cầu một chuỗi $format, như là tham số đầu tiên; có nghĩa là nó chỉ có thể được sử dụng để kiểm tra các loại định dạng bài rõ ràng:

if ( has_post_format( $format ) {
    // Current post has the $format post format;
    // do something
}

Để xác định xem một bài đăng có bất kỳ định dạng bài đăng nào không , hãy sử dụng get_post_format(), nó sẽ trả về falsenếu bài đăng hiện tại không có định dạng bài đăng được chỉ định:

if ( false != get_post_format() ) {
    // Current post has a post format;
    // do something
}

Lưu ý rằng "tiêu chuẩn" không phải là định dạng bài đăng thực tế , mà là thuật ngữ giữ chỗ cho các bài đăng không có định dạng bài đăng được chỉ định. Trong nội bộ, WordPress trả về falsechứ không phải post-format-standard, vì vậy, để truy vấn loại định dạng bài "chuẩn", bạn sẽ chỉ sử dụng if ( false == get_post_format() ).

Nguyên

has_post_format() trả về giá trị BOOLESE, hữu ích cho các điều kiện, ví dụ:

if ( ! has_post_format() ) {
     // I'm a standard-format post; do something
}

hoặc là

if ( has_post_format( array( 'gallery', 'image' ) ) {
     // I'm a gallery or image format post; do something
}

get_post_format()trả về giá trị chuỗi của loại định dạng bài hiện tại, rất hữu ích theo nhiều cách. Một trong những cách mạnh mẽ nhất là gọi các tệp phần mẫu khác nhau dựa trên định dạng bài đăng, ví dụ:

get_template_part( 'entry', get_post_format() )

Điều này sẽ bao gồm, ví dụ: "entry-sid.php" cho định dạng sang một bên hoặc "entry.php" cho định dạng chuẩn.


Thực get_template_partsự rất thông minh!
kaiser

Bennet - hoàn toàn quên đánh dấu A của bạn là giải pháp. Btw: Tất cả như đã được nâng cấp :)
kaiser

1
if ( ! has_post_format() ) {}trả về một cảnh báo (ít nhất là 3,5-RC1) do thiếu đối số thứ nhất (bắt buộc). codex.wordpress.org/Function_Reference/has_post_format
glueckpress

4

Phần sau không đúng, tôi đã tạo một vé để yêu cầu cải tiến này.

has_post_format()linh hoạt hơn bởi vì nó dựa trên has_term(), mà dựa trên is_object_in_term(). Điều này có nghĩa là bạn có thể vượt qua một loạt các định dạng bài đăng và nó sẽ trở lại truenếu bài viết có một trong các định dạng này.

if ( has_post_format( array( 'aside', 'video' ) ) {
    // It's an aside or a video
}

Vé thông số ban đầu đã đề cập đến cả hai get_post_format()has_post_format(), có lẽ bởi vì nó được xây dựng dựa trên hệ thống phân loại cũng có cả hai chức năng?


Ồ, chắc chắn, điều này mở rộng hơn nữa những gì bạn có thể làm ở đây bằng cách cho phép bạn kiểm tra các định dạng cụ thể để lấy lại câu trả lời đúng / sai của bạn.
Drew Gourley

Làm cho tôi nghĩ nếu nó có ý nghĩa chỉ đơn giản là sử dụng is_object_in_term()chức năng thay thế.
kaiser

1
@Jan Fabry has_post_format()mong đợi một chuỗi là tham số đầu tiên. Một mảng sẽ thất bại.
fuxia

1
@toscho: Darn, tôi biết tôi nên đã kiểm tra điều đó thay vì chỉ liếc vào mã. Sau đó, nó không phù hợp với các has_*chức năng khác - Tôi đã tạo một vé cho nó.
Jan Fabry

2
@Jan Fabry Đó là một cách rất hay để sửa câu trả lời của bạn. :)
fuxia

3

Đơn giản, has_post_format () trả về giá trị true / false (Boolean) rất hữu ích trong các câu lệnh IF, trong khi get_post_format () trả về định dạng bài đăng, nếu có tồn tại và có thể là NULL hoặc false nếu không có. Sử dụng các giá trị Boolean là một cách sạch sẽ để đảm bảo các điều kiện của bạn luôn hoạt động theo cách bạn mong đợi và hàm has_post_format () cho phép các điều kiện ngắn dễ dàng:

if ( has_post_format() ) {
  //yes we do
} else {
  //no we do not
}

if ( !has_post_format() ) {
  //no we do not
} else {
  //yes we do
}

Ngoài ra, điều này chỉ phù hợp với chức năng WordPress hiện có khác. Mặc dù tùy chọn B của bạn hoàn thành công việc, nhưng nó đòi hỏi kiến ​​thức chuyên môn cao hơn một chút so với khả năng người dùng WordPress trên trung bình hơi quen thuộc.


Nhắc nhở tôi về get_adjacent_postvà các next_post_linkcông cụ.
kaiser
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.