[WordPress 筆記] Day 5 Advanced Custom Fields (上)

為什麼要懂 ACF

如果你的網站會針對特定議題評分(譬如寫影評、評比外掛等),又或者是希望針對不同類型的內容,提供客製化的欄位(如價格、地址等),ACF 就是大幅降低你新增自訂欄位技術門檻的好幫手。

什麼是 ACF

ACF 除了在 WordPress.org 上提供免費版以外,在官方網站上也提供了 ACF Pro 的付費版本。如果說是接案者或是想要開發複數網站,建議可以購買開發人員版本。

如何活用 ACF

關於如何使用 ACF,其實坊間已經有很多文章和影片可以輔助,這邊提供台中小聚王大分享的內容做參考。以下省略「建立欄位」的過程,純粹筆記一些 ACF 常用、必備的語法。以下語法範例全部引用自 ACF 官方開發文件

取得欄位資料

<?php
/**
 * string $selector, int $post_id, bool $format_value
 * $format_value 為 false 時,會直接回傳資料庫內儲存的原始值
 */
get_field($selector, [$post_id], [$format_value]);
the_field($selector, [$post_id], [$format_value]);

ACF 最基本的寫法,相當於 WordPress 內建的 get_post_meta() 功能,但是使用 get_field() 的方式,會由 ACF 協助格式化,在取用圖片、圖庫等,常以陣列 (array) 形式出現的資料來說,會十分有用。

取得 Repeater 內資料(僅限 Pro 版本)

<?php
/**
 * have_rows( $selector, [$post_id] );
 */
if( have_rows('parent_field') ):
    while ( have_rows('parent_field') ) : the_row();
        $sub_value = get_sub_field('sub_field');
        // Do something...
    endwhile;
else :
    // no rows found
endif;

have_rows() 除了 Repeater 欄位之外,圖庫 (Gallery) 以及 Flexible Content 的內容都能夠以 have_rows() 搭配 get_sub_field() 的方式取得個別內容。

這裡需要注意寫法,之前因為沒有好好遵守 while ( have_rows( ‘parent_field’) ) : the_row(); 這個寫法,而使用 foreach 的方式,這時候會用陣列而非物件的方式取得儲存列的資料,導致 get_sub_field() 這個方法無法使用。

小結

上述是兩種基本 ACF 取得資料的方式。這兩組語法基本上涵蓋了 90% 的 ACF 使用情境。剩下的 10%,通常就會需要搭配勾點去進行。

預設圖片
Eric Chuang
正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

2 則留言

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124