Advanced Custom Fields (ACF) công cụ tùy chỉnh cho chuyển sâu cho wordpress

Advanced Custom Fields (ACF) là gì? dùng ACF để làm gì?  dùng ACF khi nào? Dùng ACF có thể can thiệp sâu hơn vào trong WordPress không? Đều là câu hỏi mà tất cả người dùng quan tâm. Sau đây chúng ta sẽ đi làm rõ từng vấn đề trên.

Nếu bạn là một lập trình viên và muốn tùy chỉnh sâu hơn vào trong wordpress. Muốn làm ra các công cụ mà người không biết code cũng có thể sử dụng. thì plugin ACF sẽ cung cấp cho bạn tất cả các vấn đề đó. chẳng hạn như bạn muốn thêm một nội dung vào trong tất cả các bài viết thì không thể là lần nào bạn cũng có thể vào trong file single.php để chỉnh sửa cả, việc đó sẽ rất mất thời gian và khách hàng của bạn cũng không thể là được. Làm thế nào lập trình viên có thể tạo ra các trường dữ liệu như dạng văn bản (text, textarea), dạng lựa chọn (select, radio), hình ảnh (image),… thêm vào trong hiển thị cpanel của wordpress thì plugin ACF giúp bạn làm điều này.

Advanced Custom Fields (ACF) công cụ tùy chỉnh cho chuyển sâu cho wordpress

Advanced Custom Fields (ACF) công cụ tùy chỉnh cho chuyển sâu cho wordpress

Tài liệu sử dụng ACF

ACF có kèm tài liệu hướng sử dụng tại đây với nội dung đầy đủ và chi tiết. Tuy nhiên việc xử dụng nó vẫn tương đối là khó khăn nên mình giới thiệu sơ qua về công cụ này cho các bạn được mới lập trình dễ dàng nắm bắt cách xử dụng.

Field và Field Groups trong ACF là gì

  • Fields:
    • Fields Là trường dữ liệu dùng để chứa dữ liệu bạn muốn lưu trữ.
    • Dùng để mô tả công việc đó làm như thế nào. Tức là quyết định việc dữ liệu lưu vào CSDL là dạng text, hình ảnh, true hay false,…
    • Ví dụ: bạn muốn thêm 1 trường điền hình ảnh và 1 trường video vào trong tất cả các bài viết.
  • Field Groups:
    • Field Groups là tập hợp nhiều trường dữ liệu field lại với nhau và các filed đó đều có cùng 1 điều kiện áp dụng.
    • Field Groups quyết định xem các Field đó được dùng ở đâu.
    • Nói một cách đơn giản là Field Groups giống như một cái hộp để chứa các Field.
    • Ví dụ cùng áp dụng cho danh mục (category), bài viết (post), sản phẩm (product),…
Field và Field Groups trong ACF là gì

Field và Field Groups trong ACF là gì

Quan hệ giữa Field và Field Groups.

  • Một Field Groups thì có một hoặc nhiều trường Fields (1 – n) và 1 trường một Field chỉ thuộc 1 Field Groups (1 -1).
  • Mỗi một field bắt buộc phải thuộc 1 field group.
  • Luôn luôn phải tạo Field Group rồi mới tạo được Fields.

Các loại Fields trong ACF

FIELD TYPE CƠ BẢN (có trong bản free)
  • Text
  • Textarea
  • Email
  • Number
  • Select
  • Radio Button
  • True/False
FIELD TYPE DÙNG VỚI WP_QUERY
  • Page Link
  • Post Object
  • Relationship
  • Taxonomy
  • User
FIELD TYPE CHỨA CÁC FIELD HOẶC LỚP CON (NHIỀU TẦNG DỮ LIỆU –  CHỈ CÓ TRONG BẢN PRO)
  • Repeater
  • Flexible Content
  • Field Type chỉ hiển thị trong backend
  • Message
  • Tab

Bạn thấy đấy, với từng ấy thứ, ACF bản Pro rất đáng để mua và dùng cho các dự án sử dụng WordPress nhờ khả năng tuỳ biến cao của mình.

Các loại Fields trong ACF

Các loại Fields trong ACF

Hiển thị nội dung các Field ra ngoài website (Frontend) với get_field() và the_field()

Bạn có thể lấy các nội dung từ field bạn đã nhập giá trị bằng function get_field() và the_field(). Đây là function của ACF chứ không phải wordpress vì thế phải kích hoạt plugin lên thì mới dùng được.

  • get_field(): Lấy ra dưới dạng giá trị và muốn hiển thị bạn phải dùng thêm hàng echo trong php.
  • the_field(): In trực tiếp giá trị lấy ra luôn mà không cần dùng hàm echo trong php.

Mỗi loại field type đều có cách lấy dữ liệu khác nhau và giá trị trả về cũng khác nhau, bạn có thể tìm trên Google bằng cú pháp “ACF + field type name“, ví dụ “ACF select field” là sẽ ra kết quả tài liệu cho phần này.

Cách sử dụng get_field() và the_field() để lấy giá trị:

Phần lớn các field đều có thể gọi thông qua the_field() (nếu bạn muốn hiển thị), và get_field() nếu bạn muốn lấy giá trị (và check giá trị có rỗng hay true/false).

get_field($selector, [$post_id], [$format_value]);
  • $selector (string – chuỗi ký tự) (Bắt buộc phải có) tên field hoặc từ khóa của field.
  • $post_id (mixed – Hỗn hợp) (Dạng tùy chọn có thể có hoặc không) Khai báo đối tượng mà bạn muốn lấy dự liệu post, category, taxonomy,… Nếu không điền thì sẽ mặc định là bài viết hiện tại.
  • $format_value (bool – true/false) (Dạng tùy chọn có thể có hoặc không) Mỗi một dạng field đều có định dạng giá trị trả về là khác nhau. Giá trị mặc định là true tức là luôn trả về theo định dạng mà ACF quy định. Còn nếu bạn khuông muốn lấy nguyên giá trị như ACF lưu vào trong CSDL thì khai báo là false ở tham số này.

Lấy giá trị filed cho bài viết hiện tại

Tại đây biến $value sẽ nhận giá trị của file có tên là “text_field” được khai báo trong bài viết hiện tại.

$value = get_field( "text_field" );

Lấy giá trị filed cho bài viết chỉ định

Tại đây biến $value sẽ nhận giá trị của file có tên là “text_field” được khai báo trong bài viết có ID = 123.

   $post_id = 123;
   $value = get_field( "text_field", $post_id );

Kiểm tra dữ liệu từ các fields của ACF

Bạn nên kiểm tra(debug) dữ liệu từ trả về từ hàm get_field:

$title = get_field('hero_title'); 
var_dump($title);

Kiểm tra sự tồn tại của dữ liệu trước khi dùng

Đôi khi bạn quên không nhập giá trị cho field hoặc field đó áp dụng cho tất cả các bài viết nhưng có bài thì điền giá trị và có bài thì không. Để trách lỗi không đán muốn xẩy ra thì bạn nên kiểm tra sự tồn tại của giá trị trước khi dùng field đó bằng ví dụ sau.

$value = get_field( "text_field" );
if( $value ) {
   echo $value;
} else {
   echo 'empty';
}

Lấy giá trị từ các đối tượng (object) khác nhau

Ngoài việc lấy giá trị mặc định là dạng bài viết (post). Nếu bạn dùng field cho các đối tượng khác như danh mục (category), Danh mục tùy chỉnh – sự kiện (custom taxonomy), option page,… thì bạn phải khai báo thêm tiền tố định danh phía trước ID của đối tượng đó:

  • $post_id = false; // Lấy giá trị field dùng cho bài viết (post) hiện tại.
  • $post_id = 1; // Lấy giá trị field dùng cho bài viết (post) có ID = 1.
  • $post_id = “user_2”; // Lấy giá trị field dùng cho thành viên (user) có ID = 2.
  • $post_id = “category_3”; // Lấy giá trị field dùng cho danh mục (category) có term ID = 3
  • $post_id = “event_4”; // Lấy giá trị field dùng cho danh mục tùy chỉnh – sự kiện (taxonomy) có term ID = 4
  • $post_id = “option”; // Lấy giá trị field dùng trang option Được tạo ra do khai khai báo khởi tạo trong functions.php.
  • $post_id = “options”; // Lấy giá trị field dùng trang options Được tạo ra do khai khai báo khởi tạo trong functions.php.

Để lấy giá trị của field và gán cho biến ta dùng cách sau:

$value = get_field( 'my_field', $post_id );

Lấy giá trị trả về mà không cần định dạng.

Mỗi một loại field đều có kiểu dữ liệu trả về là khác nhau như: văn bản (text), mảng (array), đối tượng (object),… Tuy nhiên ACF cũng con cấp cho chúng ta 1 lựa chọn là lấy về dạng nguyên gốc lưu trong CSDL hay lấy về dạng đã được định dạng bởi ACF qua tham số thứ 3 $format_value trong hàm get_field().

ví dụ như sau:

$image = get_field('image', false, false);

Một vài ví dụ về lấy dữ liệu thực tế.


<h2 class="hero__title"><?php the_field('title'); ?></h2>

 
$title = get_field('title);
if( !empty($title) ) :
  echo '
<h2 class="hero__title">' . $title . '</h2>

';
endif;
 
$facebook_link = get_field('facebook_link', 'options');

Kết luận

Advanced Custom Fields là một plugin quá tốt trong việc thiết kế giao diện giao diện UI tương tác người dùng bên trong Backend và tương đối dễ dùng, Cách truy xuất dữ liệu đơn giản, tạo khả năng tùy biến cao,  giảm thiểu tối da việc chỉnh sửa code với những thao tác làm nhiều lần.

Leave a Reply