ACF 動態取得 Select 下拉選單 Option 內容

情境是我幫客戶設計了一個區塊小工具來取得文章列表,而這小工具我是用 ACF 設計的,裡面有很多篩選欄位,可以想像成是把 WP_Query 做成使用者介面這樣,篩選條件是以文章的 Taxonomy 為主,下拉選單的內容則是 Terms,因此客戶可以用這小工具篩選出他需要的列表。

但棘手的點在於這個小工具要撈的文章列表並沒有存在於網站本身,而是要透過其他網站而來,再加上文章來源站的 Terms 會時常變動,因此除了文章以外,連 Taxonomy 的 Terms 也就是下拉選單的 Option 也必須要透過 API 來取得,並且在載入小工具時會自動重新抓取最新的分類項目。

還好 ACF 有提供勾點 acf/load_field/name=my_select_field 來設定當欄位載入時修改選項的內容,該勾點提供一個參數 $field,是欄位內容的陣列,如果這個欄位是下拉選單,就可以用 choices 這個 key 來設定 Option,因此只要把 API 開好,把拿到的資料以 key value 的方式存進去 $field['choices'] 裡面即可。

具體實作如下:

<?php

function set_my_select_option( $field ) {
	$field['choices'] = array();
	$options = array(
		'method'  => 'GET',
		'timeout' => 60,
		'headers' => array(
			'Content-Type' => 'application/json',
		),
	);

	$response = wp_remote_request( 'https://site.com/wp-json/wp/v1/get-terms', $options );
	$terms    = json_decode( wp_remote_retrieve_body( $response ) );
	foreach ( $terms as $key => $value ) {
		$field['choices'][ $key ] = $value;
	}
	return $field;
}
add_filter( 'acf/load_field/name=my_select_field', 'set_my_select_option' );

目錄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

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

Picture of 賴俊吾 / Oberon Lai
賴俊吾 / Oberon Lai

現為全職 WordPress 工程師,網站開發經歷 11 年,專攻前端工程與 WordPress 佈景主題、外掛客製化開發

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!

專注於分享 WordPress 開發、接案技巧、專案管理等自由工作者必備知識與心得

© 2024 想點創意科技有限公司

想點創意科技有限公司 | 統一編號 90516823
Designed by Hend Design | 隱私權政策

訂閱電子報

Hi,我是 Oberon,我會固定在每週五早上發送接案心得以及與 WordPress 相關的電子報,同時也會分享一些實用的開發知識,讓你在 WordPress 的接案路上不孤單!