Làm việc với WordPress Post Formats

Tính năng WordPress Post Formats , được giới thiệu trong Phiên bản WordPress 3.1, cho phép bạn tùy chỉnh kiểu và cách trình bày của bài đăng. Kể từ khi viết bài này, có 9 Định dạng Bài đăng được tiêu chuẩn hóa mà người dùng có thể chọn:
  1. qua một bên
  2. bộ sưu tập
  3. liên kết
  4. hình ảnh
  5. trích dẫn
  6. trạng thái
  7. băng hình
  8. âm thanh và
  9. trò chuyện
Ngoài những điều này, Định dạng Bài đăng “Chuẩn” mặc định cho biết rằng không có Định dạng Bài đăng nào được chỉ định cho bài đăng cụ thể.

Thêm hỗ trợ chủ đề

Để thêm chức năng này vào chủ đề của bạn, hãy bao gồm mã sau trong mã của bạn functions.php, chỉ định các Định dạng bài đăng mà bạn sẽ tận dụng. Ví dụ: Nếu bạn chỉ muốn các Định dạng bài đăng sang một bên, hình ảnh, liên kết, trích dẫn và trạng thái, mã của bạn sẽ giống như sau:
add_theme_support( 'post-formats', array( 'aside', 'image', 'link', 'quote', 'status' ) );
Với điều đó, bất kỳ bài đăng nào được viết phù hợp hơn với khuôn mẫu của một trích dẫn sang một bên, v.v. đều có thể được định dạng / xác định như vậy. Tại thời điểm này, giao diện người dùng bài đăng quản trị sẽ có sẵn các định dạng bài đăng cần thiết để bạn lựa chọn.

Sử dụng các định dạng bài đăng

Như với hầu hết các chức năng của WordPress, một khi bạn xác định nó trong functions.php và có quyền truy cập vào nó, thì bạn phải sử dụng nó trong các mẫu “mặt trước”. Chúng tôi vừa xác định 5 trong số 9 định dạng bài đăng có thể có (và chúng tôi NÊN sử dụng chúng). Điều này rất đơn giản, bây giờ tất cả những gì chúng ta phải làm là chạy các câu lệnh điều kiện để xác định định dạng của một bài đăng nào đó.

Ví dụ: nếu chúng tôi muốn làm “điều gì đó đặc biệt” bất cứ khi nào chúng tôi có định dạng bài đăng sang một bên, chúng tôi sẽ làm điều gì đó như sau:

if ( has_post_format( 'aside' )) {
  echo 'do something special';
}

Mặc dù cách tiếp cận trên hoạt động tốt, nhưng đó là một giải pháp thủ công. Một trong đó sẽ dẫn đến mã khá cồng kềnh. Trong vòng lặp của bạn, bạn chỉ cần thực hiện các kiểm tra cần thiết để thiết lập định dạng bài đăng nào đang được hiển thị.

Tuy nhiên, nếu bạn kết thúc việc triển khai một số định dạng bài đăng, bạn sẽ kết thúc với một món súp có điều kiện if / else xấu xí gây ra hiệu ứng này:

if ( has_post_format( 'aside' )) {
  // do something for asides
} elseif ( has_post_format( 'image' )) {
  // something for images
} elseif ( has_post_format( 'video' )) {
  // etc, etc
}
 // etc, etc

Trên đây không phải là một cách tiếp cận rất thực dụng. Ngoài ra một chút khó coi để lại trong các quan điểm. May mắn thay, WordPress giúp chúng tôi giải quyết vấn đề này một cách dễ dàng.

Chia rẽ & Chinh phục

Giả sử rằng bạn có một tiêu chuẩn trong đó bạn có một vòng lặp tiêu chuẩn.index.php

Một cái gì đó như thế này:

<div class="main-content">
<?php
  if ( have_posts() ) :
    while ( have_posts() ) : the_post();
      // the is where you output your post
      // thumbnail, title, content, etc, etc,
    endwhile;
    else :
      // this is where you output the error message
      // if nothing is found
  endif;
  ?>
</div>

Điều này tạo ra các bài đăng của bạn tốt nhưng bây giờ bạn đã thêm hỗ trợ cho các Định dạng bài đăng và cần phải phân biệt mọi thứ một chút trực quan.

Khi đã xác định 5 định dạng bài đăng (‘sang một bên’, ‘hình ảnh’, ‘liên kết’, ‘trích dẫn’, ‘trạng thái’) trước đó, bạn sẽ cần chia vòng lặp thành 5 định dạng bài đăng riêng biệt để kiểm soát chi tiết hơn chúng và trong quy trình KHÔ lên index.php mã.

Bước đầu tiên trong việc tách một vòng lặp của chúng tôi là thiết lập một quy ước đặt tên tệp trực quan. Bằng cách này, chúng ta có thể tận dụng chức năng do WordPress cung cấp .get_post_format()

Phần mẫu hay còn gọi là Nội dung là vua

Một cách tiếp cận trực quan, tốt đẹp là coi mọi thứ trong vòng lặp là “nội dung”. Có thể là một trang, một bài đăng (có hoặc không chỉ định định dạng bài đăng), hoặc thậm chí là một mục nhập loại bài đăng tùy chỉnh; bất kỳ thứ gì xuất ra bên trong vòng lặp đều được coi là nội dung.

Để đạt được điều đó, chúng ta cần chia vòng lặp của mình thành 5 định dạng bài đăng được chỉ định và một định dạng ‘mặc định’ bổ sung. Để làm như vậy, chúng tôi tạo 6 tệp và lưu chúng trong thư mục chủ đề của chúng tôi:

  1. content-aside.php
  2. content-image.php
  3. content-link.php
  4. content-quote.php
  5. content-status.php
  6. content.php
Để bắt đầu, chúng tôi sao chép / dán phần 'nội dung' của vòng lặp của chúng tôi vào từng tệp này (và chỉnh sửa, tạo kiểu và điều chỉnh vị trí, v.v. khi chúng tôi thấy phù hợp). ví dụ: có lẽ không nên chứa một đoạn trích và phải liên kết đến URL có liên quan.content-link.phpthe_title()

Quay trở lại của chúng tôi , nơi chúng tôi cắt bỏ nội dung của vòng lặp, chúng tôi bao gồm những điều sau:index.php

get_template_part( 'content', get_post_format() );

Vì vậy, vòng lặp của chúng ta bây giờ sẽ giống như sau:

<div class="main-content">
<?php
  if ( have_posts() ) :
    while ( have_posts() ) : the_post();
      get_template_part( 'content', get_post_format() );
    endwhile;
  else :
    // this is where you output the error message
    // if nothing is found
  endif;
  ?>
</div>

Với điều này, WordPress bây giờ sẽ tìm kiếm một tệp phù hợp với định dạng và bao gồm / xuất nội dung của nó ở đây.content-{post_format}.php

Trong khi chúng ta đang ở đó, chúng ta cũng nên thực hiện thay đổi tương tự đối với phần ‘không có (các) bài đăng nào’ được tìm thấy trong vòng lặp.

Đầu tiên, tạo và lưu nó, như bạn đã làm với những cái khác, trong thư mục chủ đề. Thêm thông báo ‘không tìm thấy nội dung’ có liên quan bên trong tệp đó.content-none.php

Quay lại chỉ mục, bao gồm phần bên dưới ở giữa else: và endif; để WordPress sẽ biết những gì cần xuất ra trong trường hợp chúng ta truy cập vào một trang không có nội dung.

<div class="main-content">
<?php
  if ( have_posts() ) :
    while ( have_posts() ) : the_post();
      get_template_part( 'content', get_post_format() );
    endwhile;
  else :
    get_template_part( 'content', 'none' );
  endif;
  ?>
</div>

Bây giờ bất cứ khi nào WordPress chạy qua vòng lặp, nó sẽ xuất ra các bài đăng của chúng ta, xử lý và tạo kiểu cho chúng như chúng ta đã xác định và khi không tìm thấy bài đăng nào, tệp của chúng ta và nội dung của nó sẽ được hiển thị.content-none.php